不,我不是指unset()语言构造,而是指(unset)类型的caster。从PHP手册:
允许演员阵容:
- (int),(integer) - 强制转换为整数
- (bool),(boolean) - cast to boolean
- (float),(double),(real) - cast to float
- (string) - cast to string
- (数组) - 强制转换为数组
- (object) - 强制转换为对象
- (未设置) - 强制转换为NULL(PHP 5)
网址:http://php.net/manual/en/language.types.type-juggling.php
有没有人对此有所了解(甚至在实际项目中使用过它)?
答案 0 :(得分:4)
我甚至不知道这是一个东西,但似乎目的只是可用的php原语的完整性(NULL就是其中之一)。请注意,此转换数据..它不会写入。
$x = 'foon';
$y = (unset)$x;
var_dump($x, $y) // 'foon', NULL
请注意,x
不是null
,而不是演员。
我可以说,没有理由使用(unset)<anything>
而不是仅仅写NULL
。也许其他人可以提出更好的答案。
答案 1 :(得分:2)
我使用(unset)
强制转换,以避免在需要验证和使用许多变量的情况下创建丑陋的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)
答案 2 :(得分:1)
我唯一能想到的是一些未来的用例,其中类可以定义强制转换运算符的工作方式,例如每__toString()
。一个类可能被标记为不可为空,因此转换为null会抛出异常。这与分配NULL有根本的不同,尽管为什么它的名字unset
是一个谜。
答案 3 :(得分:0)
目的是转换为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
会在这里做同样的事情,但没有投射。
答案 4 :(得分:0)
根据php.net:
示例#2使用(取消设置)投射
(未设置)转换经常与unset()函数混淆。 (未设置) 为完整性,cast仅用作NULL类型转换。它不是 改变它的铸造变量。
所以,我读它的方式是&#34;所有类型都是可投射的,null
是一种类型,所以为了保持一致性,我们在<li><a href="{% url 'polls:load_zip' javascript:history.length %}">Query</a></li>
&#34;
答案 5 :(得分:0)
(unset) cast
在PHP 7.2.x中已被弃用。因此,不再使用它。
参考:http://php.net/manual/en/migration72.deprecated.php#migration72.deprecated.unset-cast