Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переход по ссылке с переменной. (https://javascript.ru/forum/misc/71395-perekhod-po-ssylke-s-peremennojj.html)

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/redirek...a-refresh.html
echo '<meta http-equiv="refresh" content="0;https://'.$_SERVER['SERVER_NAME'].$string2.'">';

laimas 15.11.2017 17:20

Цитата:

Сообщение от Sonya
перенаправление правильно записано?

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

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

Цитата:

Сообщение от Sonya (Сообщение 470212)
Да, только сейчас обратила внимание - вместо print лучше здесь echo?

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

laimas 15.11.2017 21:47

Цитата:

Сообщение от Lion777
ничем 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

Цитата:

Сообщение от laimas (Сообщение 470240)
Причем тут скорости?

https://www.google.com/search?q=кт...nt+или+echo

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

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

laimas 15.11.2017 22:36

Цитата:

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

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

Lion777 15.11.2017 22:43

Цитата:

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

О различиях я читал давно, это вы спрашивали "причем тут скорости", я уже писал, что разницы практически нет между этими конструкциями и что даже по скорости работы они одинаковы...

laimas 15.11.2017 22:54

Цитата:

Сообщение от Lion777
это вы спрашивали "причем тут скорости", я уже писал

:)

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

Lion777 15.11.2017 23:33

автор пишет
Цитата:

Сообщение от Sonya (Сообщение 470212)
Да, только сейчас обратила внимание - вместо print лучше здесь echo?

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

laimas 15.11.2017 23:39

Цитата:

Сообщение от Lion777
с переводом обяснил для вас

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

Nexus 15.11.2017 23:45

Цитата:

Сообщение от Lion777
может покажете где мне лучше использовать эти конструкции в контексте кода с аргументами, которые бы явно указали преимущество той или иной конструкции?

Хреновый, но пример:
$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,
Цитата:

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

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

Цитата:

Сообщение от Lion777
пример хреновый, честно

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

Lion777 16.11.2017 00:06

Цитата:

Сообщение от Nexus (Сообщение 470264)
Lion777,

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

И чем теперь конкатенация вам не угодила ? )))

Nexus 16.11.2017 00:09

Lion777,
Цитата:

Сообщение от Lion777
И чем теперь конкатенация вам не угодила ?

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

Nexus 16.11.2017 00:13

Цитата:

Сообщение от Lion777
Ну, так объясните в чем глобальная разница и где мне лучше использовать то или другое ?

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


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

Lion777 16.11.2017 00:18

Цитата:

Сообщение от Nexus (Сообщение 470268)
Lion777,

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

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

Nexus 16.11.2017 00:28

Цитата:

Сообщение от Lion777
вы думаете внутренне в echo делается одна операция

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

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

Lion777 16.11.2017 00:34

Цитата:

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


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

Сообщение от Nexus (Сообщение 470272)

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

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

laimas 16.11.2017 00:36

Цитата:

Сообщение от Lion777
А телодвижений ровно столько же, что и при 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

Цитата:

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

Есть в примере смысл или нет не столь важно.
Важно то, что print можно так применить, а "echo" не получится.
Безусловно, можно изменить условие и избавится от print заюзав "echo", но это уже будет просто игнорирование имеющегося функционала языка.
Все равно, что вместо, к примеру, "preg_match_all" юзать "preg_match" в цикле.
Цитата:

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

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

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

Lion777 16.11.2017 13:40

Цитата:

Сообщение от Nexus (Сообщение 470285)
Есть в примере смысл или нет не столь важно.

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

laimas_vaikules 16.11.2017 15:12

Цитата:

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

Цитата:

Сообщение от Lion777
Вот это аргумент, тут и не поспоришь )), единственный аргумент в смысловом использовании print это в тернарном операторе
тип так

Не пишите фигню. Учите матчасть.

Dilettante_Pro 16.11.2017 16:00

laimas_vaikules,
- Что за клон? Тролль?

laimas_vaikules 16.11.2017 17:00

Dilettante_Pro,
Не хочу оффтопить. Но раз уж так просите.
Цитата:

Сообщение от Dilettante_Pro
- Что за клон? Тролль?

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

Dilettante_Pro 16.11.2017 17:31

laimas_vaikules,
Цитата:

Сообщение от laimas_vaikules
Поясните, почему?

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

Цитата:

Сообщение от laimas_vaikules
Не хочу оффтопить.

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

laimas_vaikules 16.11.2017 17:40

Цитата:

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

и?
Цитата:

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

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


Часовой пояс GMT +3, время: 22:42.