Что такое разыменованный скаляр в PHP? - PullRequest
0 голосов
/ 14 сентября 2018

Недавно я читал этот разговор по PHP .Есть часть о новых возможностях в PHP7, которая является для меня очень странной (в разделе «Единый переменный синтаксис»), в которой написано:

// support all operations on dereferencable scalars
// (not very useful)
"string"->toLower()

Uniform variable syntax part of the PHP talk image

Что такое разыменованный скаляр?Я знаю, что когда я вызываю метод для необъекта, например:

echo "string"->toLower();

Я получу следующую ошибку в PHP7:

Fatal Error: Uncaught Error: Call to a member function toLower() on string

Кроме того, я не могу найтиспособ объявления методов в строках (как то, что мы видим в JavaScript);насколько я знаю, нет никакого способа сделать это.

Итак, что говорит код выше?Как мы можем сделать вещи выше?Какой вариант использования для этого?Говоря в общем, что такое "string"->toLower()?

Примечание : обратите внимание на разговор по PHP.Это говорит о том, что материал существует в PHP7.Это сделало ошибку?Я так не думаю.Это была конференция Расмуса Лердорфа , создателя PHP.Так что, пожалуйста, не говорите «его не существует», говорите «что это такое».

Заранее спасибо.

1 Ответ

0 голосов
/ 14 сентября 2018

Краткий ответ: это будет синтаксическим сахаром.

Более длинный ответ: Это способ вызова функций с синтаксисом, который соответствует объектному синтаксису.

Например, объект (то есть экземпляр класса) может иметь метод с именем "length ()". Вызов этого метода будет выражаться с помощью следующего синтаксиса «стрелки»:

$length = $myObject->length();

Но, например, чтобы получить длину строки, вы не можете использовать тот же синтаксис, потому что строки не являются объектами. Вместо этого вы должны поместить имя переменной в круглые скобки в качестве параметра функции strlen, т. Е.

$length = strlen($myString);

То, что вы упомянули, является идеей по унификации синтаксиса, т.е.

$length = $myString->strlen();

будет другим возможным синтаксисом для вызова функции strlen. Это сделало бы операции над скалярами (и массивами) синтаксически ближе к вызовам методов объектов.

Обратите внимание, что PHP еще не поддерживает этот синтаксис, по состоянию на 2018-09-14.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...