$$$ что значит в php?
Это называется переменная с переменным именем (variable variable).
class Foo < public $deepest = 'Limbo'; public function __toString() < return 'deep'; >> $deeper = 'deepest'; $deep = 'deeper'; $b = new Foo(); echo $b->$$$b;
Выражение выполняется справа налево:
1. $b->$$($b) превращается в $b->$$($b->__toString()), поскольку именно так ведут себя объекты, когда на них пытаются натравить echo;
2. $b->$$($b->__toString()) превращается в $b->$($), именно это значение возвращает метод __toString класса Foo, инстансом которого является $b;
3. $b->$($) превращается в $b->$($deep), это как раз вызов переменной при помощи значения из другой переменной;
4. $b->$($deep) превращается в $b->$ , поскольку именно такое значение находится в переменной $deep;
5. $b->$ превращается в $b->($deeper);
6. $b->($deeper) превращается в $b->deepest;
7. наконец, получается значение свойства ‘deepest’ из $b, а там как раз хранится ‘Limbo’, оно и выводится в echo.
Ответ написан более трёх лет назад
Нравится 33 8 комментариев
Что значит «.=» в php?
Не могу найти значение символа .= (точка равно ) в php. И не могу понять, что означает $key& , конкретно зачем амперсанд в конце. Создаю функцию по удалению get -параметра из url. Пример:
$ulr .= "$key&"
Отслеживать
29.1k 1 1 золотой знак 21 21 серебряный знак 43 43 бронзовых знака
задан 15 фев 2018 в 10:27
111 1 1 серебряный знак 10 10 бронзовых знаков
$ulr .= «$key&» == $ulr = $ulr.»$key&» php.net/manual/ru/language.operators.string.php зачем амперсант в конце Да просто литерал. разделитель параметров в URL, вероятно. И эта. в слове «амперсанд» нет буквы «т».
15 фев 2018 в 10:30
амперсанд это просто символ. То есть, если $key был равен 123, то к строке $url будет дописана строка «123&»
15 фев 2018 в 10:32
parse_url , parse_str , unset и implode вам в помощь
15 фев 2018 в 10:37
хотя можно и preg_replace -ом все решить
15 фев 2018 в 10:38
Спасибо большое.
15 фев 2018 в 11:02
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Добавить в переменную
Например:
$a = ‘abc’;
$a .= ‘123’;
echo $a; //Выведит abc123
Отслеживать
ответ дан 15 фев 2018 в 10:45
MyLoveIsSharks MyLoveIsSharks
348 1 1 серебряный знак 14 14 бронзовых знаков
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Что обозначает в php
Псевдотипы — это слова, используемые в документации PHP, для обозначения типов или значений, какие могут принимать аргументы. Обратите внимание, что они не являются примитивами языка PHP. Следовательно вы не можете использовать псевдотипы в ваших функциях.
mixed
mixed говорит о том, что параметр может принимать много (но необязательно все) типов.
Например, функция gettype() принимает все типы PHP, тогда как str_replace() принимает только типы string и array .
number
number говорит о том, что параметр может быть либо integer , либо float .
callback
Псевдотип callback использовался в этой документации до того, как был введен тип callable в PHP 5.4. Он означает в точности то же самое.
array|object
array|object указывает, что параметр может быть как массивом array , так и объектом object .
void
void в качестве типа результата означает, что возвращенное значение бесполезно. void в списке параметров означает, что функция не принимает параметров. Начиная с PHP 7.1, void разрешается использовать в качестве подсказки возвращаемого типа функции.
$. в прототипах функции означает and so on (и так далее). Это имя переменной используется, когда функция может принимать бесконечное количество параметров.
Зачем использовать declare (strict_types=1)
Прочитайте о том, как вы можете использовать declare(strict_types=1) для повышения безопасности типов PHP-кода. Мы обсудим, как сделать код более надёжным и избежать принудительного приведения типов, что может привести к ошибкам.
Введение
Если вы пишете на PHP, вы, вероятно, видели выражение declare(strict_types=1) в начале некоторых PHP файлов.
Когда я впервые увидел это выражение, я понятия не имел, что оно делает. Я предположил, что это какой-то комментарий или, может быть, старый синтаксис PHP, который был до меня, но я ошибался (очень ошибался)!
В этой статье мы расскажем, что такое declare(strict_types=1) и как это может помочь вам повысить безопасность типов PHP-кода.
Что такое declare(strict_types=1) ?
declare(strict_types=1) — это выражение, обеспечивающий строгую типизацию в приложениях PHP.
Когда вы используете это выражение, PHP будет выполнять строгую проверку типов параметров функций и возвращаемых типов. Это означает, что если ваша функция ожидает определённый тип параметра или возвращаемого значения, PHP выдаст ошибку, если используется неправильный тип.
Возьмём простой пример, в котором не используется declare(strict_types=1) :
function add(int $a, int $b): int
return $a + $b;
>
Теперь предположим, что мы вызвали эту функцию со строковыми параметрами:
echo add('1', '2');
// Вывод:
// 3
PHP с радостью конвертирует строковые параметры в целочисленные и вернёт результат 3 .
В некоторых случаях такое поведение может вас полностью устраивать. Но это может иметь некоторые непредвиденные последствия, которые могут вызывать ошибки в вашем приложении.
Однако давайте представим, что в этом примере мы используем declare(strict_types=1) . Мы могли бы сделать это, добавив следующее выражение в начало файла:
declare(strict_types=1);
function add(int $a, int $b): int
return $a + $b;
>
Теперь, если мы вызовем функцию add со строковыми параметрами, PHP выдаст ошибку:
echo add('1', '2');
// Output:
// Fatal error: Uncaught TypeError: Argument 1 passed to add() must be of the type int, string given
Как мы видим, PHP выдал ошибку, потому что функция add ожидала передачи целых чисел, но вместо этого получила строки.
Точно так же PHP выдаст ошибку, если включена строгая проверка типов, и мы пытаемся вернуть неверный тип данных из метода. Предположим, что наша функция add теперь принимает числа с плавающей точкой вместо целых чисел и у нас не включена строгая проверка типов:
function add(float $a, float $b): int
return $a + $b;
>
Мы могли бы вызывать функцию следующим образом:
echo add(1.25, 2.25);
// Вывод:
// 3
Вы заметили проблему в выводе?
Ответ, который мы должны были получить равен 3.5 . Однако поскольку мы определили возвращаемый тип как int , мы преобразовали float (которое должно быть возвращено) в целое число и потеряли точность. Как вы можете представить, это может вызвать некоторые проблемы в других частях нашего приложения, где мы используем этот результат, и может потребоваться точность.
Исправим эту проблему, используя declare(strict_types=1) :
declare(strict_types=1);
function add(float $a, float $b): int
return $a + $b;
>
Затем, мы могли бы вызвать функцию следующим образом:
echo add(1.25, 2.25);
// Вывод:
// Fatal error: Uncaught TypeError: add(): Return value must be of type int, float returned
Как мы видим, включив строгую проверку типов, мы можем обнаружить, что функция возвращает неправильный тип данных. Это здорово, потому сто может указать на возможную ошибку в коде, о которой мы не знали. Затем мы могли бы предпринять необходимые шаги, чтобы:
- Обновить возвращаемые типы, если они неверные.
- Обновить подсказки типов, если они неверные.
- Обновить тело функции, чтобы вернуть правильный тип данных, если он неверен.
- Исправить любые ошибки в коде, вызывающем функцию, которые могут передавать ей неправильный тип данных.
Нужно ли использовать declare(strict_types=1)
Я считаю хорошей идеей использовать declare(strict_types=1) во всех PHP-файлах. Раньше я думал, что просто иметь подсказки типов и возвращаемые типы было достаточно, чтобы гарантировать передачу правильных типов данных, но с тех пор я передумал. Я чувствую себя намного увереннее, когда использую declare(strict_types=1) и обнаружил несколько ошибок в результате его использования (в частности, при добавлении к старым кодовым базам).
Узнав об этом я взял за привычку использовать его в каждом новом PHP файле, который я создаю. Фактически, я обновил все шаблоны в моей настройке PHPStorm, чтобы они автоматически выключались в начало каждого файла, который я создаю. Например, вот шаблон, который используется при создании нового PHP класса:
declare(strict_types=1);
#parse("PHP File Header.php")
#if ($)
namespace $NAMESPACE>;
#end
class $NAME>
>
Это действительно удобно, потому что побуждает меня продолжать использовать declare(strict_types=1) без необходимости вносить какие-либо изменения вручную после создания файла (о чём я определённо забыл бы сделать!).
Для моих Laravel читателей, вы также можете опубликовать шаблоны, которые используются для создания PHP файлов при выполнении команд Artisan, таких, как php artisan make:controller . Публикуя шаблоны, вы можете отредактировать их и добавить declare(strict_types=1) вверху. Это означает, что файлы, которые вы создаёте с помощью команд Artisan, будут создаваться с уже включённой более строгой безопасностью типов.
Конечно, если вы собираетесь добавить более строгую проверку типов к своим существующим файлам, я настоятельно рекомендую сначала установить качественный набор тестов. Ваш PHP-код мог разрешать неверную передачу типов данных без каких-либо ошибок. Но, включив строгую проверку типов, ваш код станет гораздо менее щадящим и может начать выдавать ошибки. Это может привести к неожиданному сбою приложения для пользователей.
Также вы можете обнаружить, что необходимо провести рефакторинг части кода, чтобы сделать его совместимым с declare(strict_types=1) . Хотя я бы не считал это чем-то плохим. Вместо этого я бы рассматривал это как возможность улучшить качество вашего кода.
Для упрощения процесса добавления в код declare(strict_types=1) , вы можете использовать такой инструмент, как PHPStan, который может выявить несоответствия типов.
Заключение
Надеюсь эта статья дала вам обзор того, что такое declare(strict_types=1) и как это может помочь улучшить безопасность типов PHP-кода.
