В PHP, какая цель делает (не задана)?
Нет, я не имею в виду конструкцию языка unset(), но заклинатель типа (unset). Из руководства PHP:
Разрешенные броски:
- (int), (integer) - cast to integer
- (bool), (boolean) - cast to boolean
- (float), (double), (real) - cast to float
- (строка) - строка в строке
- (массив) - cast to array
- (объект) - приведение к объекту
- (unset) - отбрасывается в NULL (PHP 5)
URL: http://php.net/manual/en/language.types.type-juggling.php
Кто-нибудь имеет представление об этом (или даже использовал его в реальном проекте)?
Ответы
Ответ 1
Я даже не знал, что это что-то, но похоже, что цель - это просто полнота доступных php-примитивов (один из них - NULL). Обратите внимание, что это отличает данные.. он не пишет.
$x = 'foon';
$y = (unset)$x;
var_dump($x, $y) // 'foon', NULL
Обратите внимание, что x
не null
, несмотря на приведение.
Рядом, как я могу судить, нет оснований когда-либо использовать (unset)<anything>
, а не просто писать null
. Возможно, кто-то еще может придумать лучший ответ.
Ответ 2
Я использую (unset)
casting, чтобы избежать создания уродливых операторов if
else
в ситуации, если вам нужно проверить и использовать многие переменные, но если одна переменная считается неправильной и вы не хотите проверять оставшиеся.
Например, у вас есть следующий код:
$variableone = "ffo";
$variabletwo = "obb";
$variablethree = "aar";
if(checkonefailed($variableone))
{
outputsomething();
}
else
{
dosomething($variableone)
if(checktwofailed($variabletwo))
{
outputsomething();
}
else
{
dosomething($variabletwo)
if(checkthreefailed($variablethree))
{
outputsomething();
}
else
{
dosomething($variablethree)
//And so own
}
}
}
Вы можете переписать его следующим образом:
$variableone = "ffo";
$variabletwo = "obb";
$variablethree = "aar";
if(checkonefailed($variableone))
{
outputsomething();
}
//False or check
elseif((unset)(dosomething($variableone))||(checktwofailed($variabletwo)))
{
outputsomething();
}
elseif((unset)(dosomething($variabletwo))||(checkthreefailed($variablethree)))
{
outputsomething();
}
elseif((unset)(dosomething($variablethree))/*or next variable*/)
{
//And so own
}
Идея, взятая из кода программирования Go
if variableone := "ffo"; checkonefailed(variableone) {
outputsomething()
} else if dosomething(variableone); variabletwo := "obb"; checktwofailed(variabletwo) {
outputsomething()
} else if dosomething(variabletwo); variablethree := "aar"; checkthreefailed(variablethree) {
outputsomething()
} else dosomething(variablethree)
Ответ 3
Единственное, что я могу придумать, - это какой-то будущий вариант использования, когда класс может определить, как работают операторы литья, например, с помощью __toString()
. Класс потенциально может быть помечен как недействительный, и, следовательно, приведение к null приведет к исключению. Это было бы принципиально отличным от назначения NULL, хотя почему он назвал unset
загадочным.
Ответ 4
Цель состоит в том, чтобы наложить на NULL, как вы уже писали в своем вопросе:
(unset) - cast to NULL (PHP 5)
Итак, скажем, у вас есть переменная $var
, из которой isset($var)
есть TRUE
. Затем вы можете применить эту переменную к NULL
:
/**
* @param mixed $var anything
*/
function func($var)
{
if (isset($var))
{
$var = (unset) $var;
}
# the rest of the code expects $var to be NULL
...
}
Конечно, $var = NULL
будет делать то же самое здесь, но без литья.
Ответ 5
Согласно php.net:
Пример # 2 Использование (unset) casting
(unset) литье часто путается с функцией unset(). (Отключенное) литье служит только для отливки NULL, для полноты. Это не измените переменную, которую она отличает.
Итак, способ, которым я его читаю, - "Все типы являются допустимыми, null
- это тип, поэтому для согласованности мы добавили приведение к null
"
Ответ 6
(unset) cast
теперь устарело в PHP 7.2.x. Так что не используйте его больше.
Ссылка: http://php.net/manual/en/migration72.deprecated.php#migration72.deprecated.unset-cast