Вход

Просмотр полной версии : Переход по ссылке с переменной.


Sonya
15.11.2017, 15:48
Здравствуйте! Надеюсь на помощь, что-то совсем голова кругом, проверяю большой код, устала с документацией. Корректен ли кусок кода:

foreach ($ulink->data as $val){
$string1 = URLpage;
$string2 = '/url/'.$val->data['Id'];
if ($string1 !== $string2){
print "<meta http-equiv='refresh' content='0; url=https://{$_SERVER['SERVER_NAME']}$string2'>";
}
}

Т.е. проверяем, если переменная $string1 не равна переменной $string2, то перенаправляем на $string2, и вот это перенаправление правильно записано?
"<meta http-equiv='refresh' content='0; url=https://{$_SERVER['SERVER_NAME']}$string2'>" или надо так:
"<meta http-equiv='refresh' content='0; url=https://{$_SERVER['SERVER_NAME']}" . $string2 . "'>"

ksa
15.11.2017, 17:03
Sonya, это точно в тему "Общие вопросы Javascript"? :blink:

Nexus
15.11.2017, 17:16
Sonya,
http://redirekt.info/article/redirekt-na-html-s-zaderzhkojj-meta-refresh.html
echo '<meta http-equiv="refresh" content="0;https://'.$_SERVER['SERVER_NAME'].$string2.'">';

laimas
15.11.2017, 17:20
перенаправление правильно записано?


Оба случая рабочие - переменные заключенные в двойные кавычки будут обработаны. Второй случай менее нагруженный для парсера, то тогда и применять кавычки надо иначе: двойные в одинарных:

echo '<meta http-equiv="refresh" content="0; url=https://' . $_SERVER['SERVER_NAME'] . $string2 . '">';

Sonya
15.11.2017, 17:46
Nexus,
laimas,
Большое спасибо!

Sonya
15.11.2017, 17:48
Да, только сейчас обратила внимание - вместо print лучше здесь echo?

Nexus
15.11.2017, 17:54
Sonya, почитайте тут про отличия этих функций:
http://php.net/manual/ru/function.print.php

Lion777
15.11.2017, 18:36
Да, только сейчас обратила внимание - вместо print лучше здесь echo?

ничем echo не лучше за print, почти одно и тоже, тесты на скорость проводили, тоже практически одинаково. И зачем вопросы о php в js ?

laimas
15.11.2017, 21:47
ничем echo не лучше за print, почти одно и тоже, тесты на скорость проводили

Причем тут скорости?

ruslan_mart
15.11.2017, 22:08
А почему бы не сделать так?

foreach ($ulink->data as $val){
$string1 = URLpage;
$string2 = '/url/'.$val->data['Id'];
if ($string1 !== $string2){
header("Location: https://{$_SERVER['SERVER_NAME']}$string2");
}
}

laimas
15.11.2017, 22:11
ruslan_mart,
не получится если уже был вывод в браузер. Не понятно другое - зачем здесь вообще цикл.

Lion777
15.11.2017, 22:23
Причем тут скорости?
https://www.google.com/search?q=кто+быстрее+print+или+echo

вот холивары на тему что лучше и быстрее

---
И да, Соня, этот цикл должен быть между тегами <head></head>, если до вывода чего либо в браузер, то лучше используй header('Location: ')

laimas
15.11.2017, 22:36
вот холивары на тему что лучше и быстрее

Если вы будете искать выгоду в скорости в одной микросекундной конструкции, то своей проект закончите в следующем тысячелетии. Почитайте лучше о различиях.

Lion777
15.11.2017, 22:43
Если вы будете искать выгоду в скорости в одной микросекундной конструкции, то своей проект закончите в следующем тысячелетии. Почитайте лучше о различиях. О различиях я читал давно, это вы спрашивали "причем тут скорости", я уже писал, что разницы практически нет между этими конструкциями и что даже по скорости работы они одинаковы...

laimas
15.11.2017, 22:54
это вы спрашивали "причем тут скорости", я уже писал

:)

Ну как можно подымать речь о скоростях применительно к операции выполненной (а может и нет, по условию) всего один раз? В контексте кода автора без разницы что будет применено. А вот поведение данных конструкций языка в контексте кода вообще, различается, что в первую очередь и учитывают разработчики.

Lion777
15.11.2017, 23:33
автор пишет
Да, только сейчас обратила внимание - вместо print лучше здесь echo?
а я ответил, что "разницы между ними не заметите" - с переводом обяснил для вас )), или что вы хотите донести, может покажете где мне лучше использовать эти конструкции в контексте кода с аргументами, которые бы явно указали преимущество той или иной конструкции?

laimas
15.11.2017, 23:39
с переводом обяснил для вас

Не надо мне пояснять. А echo и print не одно и тоже, для тех кто это понимает, а не так как вы пишите "разницы между ними не заметите".

Nexus
15.11.2017, 23:45
может покажете где мне лучше использовать эти конструкции в контексте кода с аргументами, которые бы явно указали преимущество той или иной конструкции?
Хреновый, но пример:
$form_open='<form>';
$input='<input/>';
$form_close='</form>';

//Вариант с print
print $form_open;
print $input;
print $form_close;

//Вариант с echo
echo $form_open,
$input,
$form_close;В кач-ве аргумента: с "echo" конструкцию вывода информации нужны вызвать единожны.

Lion777
15.11.2017, 23:47
Ну, так объясните в чем глобальная разница и где мне лучше использовать то или другое ? Иначе те кто не понимают так и будут делать ошибки ... )))
--- пример хреновый, честно

$form_open='<form>';
$input='<input/>';
$form_close='</form>';

//Вариант с print
//Вот мой вариант с print
print $form_open.
$input.
$form_close;

//Вариант с echo
echo $form_open,
$input,
$form_close;

Nexus
15.11.2017, 23:56
Lion777,
print - специальная языковая конструкция, которая может принимать на вход один параметр и печатать его. print всегда возвращает 1, поэтому может быть использован в контексте выражения. Другими словами, print синтаксически является унарным оператором с приоритетом ниже ?: и = и выше and.

echo - это специальная языковая конструкция, которая может принимать на вход произвольное количество аргументов и печатать их. Функция echo не возвращает никаких значений, а потому не может использоваться в контексте выражения.
пример хреновый, честноВы использовали конкатекацию строк в связке с print и считаете, что это более "правильно", чем заюзать echo?

Lion777
16.11.2017, 00:06
Lion777,

Вы использовали конкатекацию строк в связке с print и считаете, что это более "правильно", чем заюзать echo?
И чем теперь конкатенация вам не угодила ? )))

Nexus
16.11.2017, 00:09
Lion777,
И чем теперь конкатенация вам не угодила ?
Зачем использовать 3 операции там, где можно использовать одну?

Nexus
16.11.2017, 00:13
Ну, так объясните в чем глобальная разница и где мне лучше использовать то или другое ?
В этом примере вы не сможете заменить "print" на "echo" не изменяя условия:
if(true and false or print('some text'))
echo PHP_EOL,
'true';

PS. Разница между конструкциями есть, однако если использовать конструкции исключительно для вывода информации, то тут можно использовать любую из них, разница будет незаметна.

Lion777
16.11.2017, 00:18
Lion777,

Зачем использовать 3 операции там, где можно использовать одну?

вы думаете внутренне в echo делается одна операция? Там не происходит, например, конкантенация или циклом выводятся данные? А телодвижений ровно столько же, что и при echo, только там запятые, а тут точки, а ну да, print на один символ больше чем echo ))

Nexus
16.11.2017, 00:28
вы думаете внутренне в echo делается одна операция
Кто знает.
Может вы заморочитесь и найдете в исходниках реализацию этой конструкции, чтобы доказать мою неправоту)

И, кстати, да, я думаю, что конкатекация в "echo" не имеет место быть :)

Lion777
16.11.2017, 00:34
В этом примере вы не сможете заменить "print" на "echo" не изменяя условия:
if(true and false or print('some text'))
echo PHP_EOL,
'true';



Ну в этом примере конечно не смогу ))), но смысла в нем не вижу, ведь print всегда возвращает 1
---


И, кстати, да, я думаю, что конкатекация в "echo" не имеет место быть :) И почему же ? ))) чем она хуже запятых, есть аргументы ? Мы вот счас спорим непонятно о чем, с одной лишь разницей, что я не доказываю что лучше, а говорю о том "что не хуже" (одна не хуже другой)

laimas
16.11.2017, 00:36
А телодвижений ровно столько же, что и при echo, только там запятые, а тут точки

Это не точки и запятые - echo в отличии от print может принимать несколько аргументов. Что касается просто "пофиг, выводит да и ладно", конечно можно и так колбасить:

<div><?php print 'text'?></div>

но все таки проще так:

<div><?='text'?></div>

и это будет выведено именно с использованием echo, print тут никак не прокатит так как результатом будет не

<div>text</div>

а

<div>text1</div>

ибо print являясь конструкцией ведет себя как функция, которая всегда возвращает 1. Вот так не получится:

expression ? echo 1 : echo 0

а так прокатит:

expression ? print 1 : print 0

с echo только с выносом конструкции за пределы выражения

echo expression ? 1 : 0

Открывайте матчасть, читайте.

Lion777
16.11.2017, 01:24
Ахах, начнем с конца )))
конечно так не напишешь
expression ? echo 1 : echo 0
ведь echo ничего не возвращает и в чем тут преимущество ?
echo expression ? 1 : 0;
от
print expression ? 1 : 0; или expression ? print 1 : print 0; ?

Данная конструкция<?='text'?>
это всего лишь альтернативный способ записи echo и конечно если в ней написать <div><?= print 'text'?></div> то выведет text1, ведь это тоже, что написать echo print text;,
ну а если уж так написать <?php print 'text'?> то вся программа пойдет на перекосяк )))... И что вы хотели доказать ? Поумничать ? Преимущество в чем ? Что тот, что тот могу использовать во всех конструкциях, так что лучше то ???

laimas
16.11.2017, 01:55
Lion777,
учите матчасть, ибо вы не понимаете о чем говорите. Может после прочтения поймете, чем выгоднее запятая от точки.

Без обид, но вы несете такую пургу, что вести диалог далее нет никакого смысла.

Lion777
16.11.2017, 02:10
Да какие тут обиды ))), дайте ссылку почитать о точках с запятыми, а то походу весь инет пургу несет )))

laimas
16.11.2017, 03:01
Ну а какая может быть еще ссылка как не на официальное руководство создателей http://www.php.net/manual/ru/index.php

Lion777
16.11.2017, 03:20
Умничать любой может, а вы докажите, что умный и дайте ссылочку о точках с запятыми..

laimas
16.11.2017, 08:09
Я не обязан кому-то что-то доказывать, да и желания такового нет. В руководстве все есть - операторы, приоритеты и описание выше упомянутых конструкций. Открывайте соответствующие разделы руководства сами, вникайте.

Nexus
16.11.2017, 08:24
Ну в этом примере конечно не смогу ))), но смысла в нем не вижу, ведь print всегда возвращает 1
Есть в примере смысл или нет не столь важно.
Важно то, что print можно так применить, а "echo" не получится.
Безусловно, можно изменить условие и избавится от print заюзав "echo", но это уже будет просто игнорирование имеющегося функционала языка.
Все равно, что вместо, к примеру, "preg_match_all" юзать "preg_match" в цикле.
Мы вот счас спорим непонятно о чем, с одной лишь разницей, что я не доказываю что лучше, а говорю о том "что не хуже" (одна не хуже другой)
Моей целью было не доказать, что одна лучше другой, а показать, что различия в конструкциях есть и они (конструкции) в определенных условиях не взаимозаменяемы.

PS. что лучше: ванильное или шоколадное мороженное?) Смысл схож.

Lion777
16.11.2017, 13:40
Есть в примере смысл или нет не столь важно.


Вот это аргумент, тут и не поспоришь )), единственный аргумент в смысловом использовании print это в тернарном операторе
тип так
условие ? 1 : print 'Ошибочка вышла!';
Но в контексте данной темы было указанно тс, что для нее нету разницы, что использовать, пока профессор laimas не начал поучительно умничать...

laimas_vaikules
16.11.2017, 15:12
PS. что лучше: ванильное или шоколадное мороженное?) Смысл схож.

Вот это аргумент, тут и не поспоришь )), единственный аргумент в смысловом использовании print это в тернарном операторе
тип так
Не пишите фигню. Учите матчасть.

Dilettante_Pro
16.11.2017, 16:00
laimas_vaikules,
- Что за клон? Тролль?

laimas_vaikules
16.11.2017, 17:00
Dilettante_Pro,
Не хочу оффтопить. Но раз уж так просите.
- Что за клон? Тролль?

Поясните, почему?

Dilettante_Pro
16.11.2017, 17:31
laimas_vaikules,
Поясните, почему?

Во-первых, есть достаточно авторитетный участник форума laimas, который активно выступал и в этой теме.

Не хочу оффтопить.
А что тогда такое по вашему ваш пост №36? Типичный троллинг.

laimas_vaikules
16.11.2017, 17:40
Во-первых, есть достаточно авторитетный участник форума laimas, который активно выступал и в этой теме.

и?
А что тогда такое по вашему ваш пост №36? Типичный троллинг.

Все равно не понял, где там троллинг...

laimas
16.11.2017, 17:45
Dilettante_Pro,
сынок Вайкуле видимо.

Dilettante_Pro
16.11.2017, 18:01
laimas_vaikules,
Все равно не понял, где там троллинг...
Да, я ошибся - очень ценное, содержательное сообщение. Прошу прощения. Всего хорошего.

laimas_vaikules
16.11.2017, 18:21
Dilettante_Pro,
А чем по Вашему пост №36 отличается от поста №29? Если Вы изучали логику, то по форме и содержанию они идентичны. Просто пост №36 лаконичнее.

А вот пост №41 от авторитетного для Вас пользователя очень похож на троллинг. Именно подростки в онлайн играх вспоминают мамок и папок...

laimas
16.11.2017, 19:05
Именно подростки в онлайн играх вспоминают

Не играю в компьютерные игры и возраст не тот, и ничего привлекательного в них не вижу. Так что чутье ваше вас обманывает.

laimas_vaikules
16.11.2017, 19:28
Так что чутье ваше вас обманывает.
Не рекомендую полагаться на чутье. Я привел факт. Судя по манере общения и посыла в посте №41 явно выявлен инфантилизм, что присуще подросткам.
Это логические суждения с вытекающим умозаключением.

Не играю в компьютерные игры и возраст не тот, и ничего привлекательного в них не вижу.
Тогда не пишите чепуху. Думайте головой, пожалуйста.

laimas
16.11.2017, 19:35
Мимикрия, я так полагаю в данном случае сознательная, тоже далеко не показатель ума.

Далее в можете режиме монолога продолжать, если охота.

laimas_vaikules
16.11.2017, 19:45
Мимикрия, я так полагаю в данном случае сознательная, тоже далеко не показатель ума.

Я тоже в детстве любил выписывать всякие умные слова, особо не понимая их смысла.
Далее в можете режиме монолога продолжать, если охота.

Все дети реагируют в такой форме, если не могут вести диалог. Например - "Я в домике". Помните? Все играли в подобные игры. Видно Вы еще не выросли из этого возраста.

ruslan_mart
17.11.2017, 11:58
laimas_vaikules, сейчас зайду в админку и чекну айпишник :) Если узнаю, что Вы - фейк, то оригинальный аккаунт пойдёт в баньку. :) Договорились?

laimas_vaikules
17.11.2017, 12:19
ruslan_mart,
Я не против бана, если я нарушил правила форума. Но если вы справедливый администратор, то проанализируете и забаните пользователей, которые не соблюдают правила.
Со своей стороны я нарушений не вижу, пишу так же как и некоторые пользователи выше.