在PHP中,(未设置)的目的是什么?

时间:2011-12-17 02:14:34

标签: php

不,我不是指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

有没有人对此有所了解(甚至在实际项目中使用过它)?

6 个答案:

答案 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)

因此,假设您有一个变量$varisset($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