Здравствуйте. Скажите, пожалуйста, права ли я. Интересует больше PHP, можно ли так делать, есть ли какие-то подводные камни.
Переменную в JS нужно объявить
var a = "1";
a += 1;
alert(a); // '11'
Так работать не будет
a += 1;
alert(a);
А в PHP всё работает
$a .= 1;
echo $a; // '1'
В JS не работает
var a = '1';
if (a == '0') {b = '3';}
alert(b);
Так покажет, что переменная не существует
var a = '1';
if (a == '0') {var b = '3';}
alert(b); // undefined
Я объявляю переменную до if
var a = '1',
b = '';
if (a == '0') {b = '3';}
alert(b); // ''
Зато так работает
var a = '1';
if (a == '1') {var b = '3';}
alert(b); // '3'
А в PHP всё работает
$a = '1';
if ($a == '1') {$b = '3';}
echo $b; // '3'
И когда переменная не объявлена, возвращается пустое значение, а не undefined
$a = '1';
if ($a == '0') {$b = '3';}
if ($b == '') echo "Hellow"; // "Hellow"
Потому что php
берет на себя объявления переменных, делая это непрозрачно, невидимо для пользователя. Объявляются они в текущем контексте. Например:
function test(){
$a = 'test passed';
}
test();
var_dump($a);// >>> NULL
JS
же наоборот, требует явного определения переменных, однако, не требуя явно указывать их тип. При том, объявление переменной в любом месте кода, поднимает ее в начало текущего контекста, например:
function a(){
console.log(a);
var a = 'test';
}
//будет аналогично записи
function b(){
var a;
console.log(a);
a = 'test';
}
Переменные в обоих языках объявляются в текущих контекстах, кроме того, php
не ищет переменные в контексте выше(только если не используется ключевое слово global
, которое позволяет использовать переменные из глобального контекста):
//php
$a = 'test';
function test(){
var_dump($a);// >>> NULL
$a = 'test passed';
echo $a;// >>> 'test passed'
}
test();
echo $a;// >>> 'test'
Однако, js
"ищет" объявление переменной в контекстах, от самого вложенного, до самого общего, и если не находит, то посылает сообщение с ошибкой.
//js
var a = 'test';
var b = 'test N2';
function hax(){
a = 'test passed';
var b = 'test N2 passed';
function c(){
var a = 'test has been failed!';
console.log(a, b) //>>>'test has been failed', 'test N2 passed'
}
c();
}
hax();
console.log(a, b);// >>> 'test passed', 'test N2'
Для того что бы проверить переменную на существование необходимо сделать if (isset($b))
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
PHP Fatal error: Call to undefined method SiteController::actionIndexfsite()
ЗдравствуйтеУстановил себе на сайт графический редактор, и когда вставляю изображение и сохраняю, все данные кодируются в base64 и отправляются...
Добрый день! При поиске наибольшей высоты у элементов path в svg почему-то высота равна нулюНе пойму в чем может быть дело, возможно object не успевает...
Прошу помочь разобраться в ошибке, которая возникает при работе скрипта фото коллажа, описанного на хабре (https://habrahabrru/sandbox/78613/)