如何在PHP中创建新的运算符?

| 我看到自己为PHP上的所有类型默认分配以下代码
$variable = $variable ? $variable : \'default value\';
我知道有了5.3我就能做到
$variable = $variable ?: \'default value\';
我想通过能够做到的进一步简化它
$variable ?= \'default value\';
并重新分配该变量,以防其评估为false。是否可以创建该作业?我需要编译自己的php版本吗?     
已邀请:
        在不更改PHP源代码的情况下,不能在PHP中创建新的运算符。 而且您也不想更改它,请相信我。当然,这很容易-PHP是开放源代码,并使用了可以轻松修改的简单的LALR(1)解析器-但这会使您的代码与标准PHP实现不兼容。因此,您将极大地限制谁可以运行代码-除了您之外,其他人可能都不在话下,因为没有其他人会愿意为了运行您的代码而修改他们的PHP引擎。 更新:我写了一个关于如何向PHP添加新语法(如运算符)的小教程:http://nikic.github.com/2012/07/27/How-to-add-new-syntactic-features-to- PHP.html     
        在PHP中,您无法创建运算符或重载现有的运算符,例如
=
。 您可以检查操作员包,但是您的代码将无法运行。     
        您不能在PHP中执行此操作,而不能使用此语法。
<?
$test = array(\"3 is 5\", \"3 is not 5\"); 
$r = $teste [+( 3 != 5)];
echo $r; //return \"3 is not 5\" 
?>
    
        您可以使用一个函数:
<?php
    function defvar(&$var) {
        if (empty($var)) { $var = \'default value\'; }
    }

    // testing
    $set = \'test\';
    defvar($set);
    echo $set;

    defvar($notset);
    echo $notset;
?>
输出:
test
default value
或者,如果您更喜欢分配:
<?php
    function setdefvar($var) {
        if (empty($var)) { return \'default value\'; }
        else { return $var; }
    }

    // testing
    $set = \'test\';
    $set = setdefvar($set);
    echo $set;

    $notset = setdefvar($notset);
    echo $notset;
?>
输出:
test
default value
    
        在怀疑是否有可能创建新操作时,这似乎是最多的例子。我个人认为?=会很方便。 由于创建新的运算符将涉及创建自己的PHP版本,并且如果决定打包代码,对其他人可能不是很有用,所以您可以轻松地创建一个函数来模拟相同的效果。
/**
 * Global function to simplify the process of
 * checking to see if a value equates to true
 * and setting it to a new value if not.
 * 
 * @param mixed $var the original variable to
 * check and see if it equates to true/false
 * @param mixed $default the default value to
 * replace the variable if it equates to false
 * 
 * @return mixed returns the variable for
 * either further processing or assignment.
 */
function _d( &$var, $default ) {
    return $var = $var ?: $default;
}
然后,您可以调用该函数,根据需要将其分配给另一个变量,或者甚至根据需要嵌套它们以在变量的层次结构中分配默认值。
_d( $variable, \'default value\' );
// $variable = $variable ?: \'default value\';

$variable1 = _d( $variable, \'default value\' ) . \'s\';
// $variable1 = ( $variable = $variable ?: \'default value\' ) . \'s\';

_d( $variable, _d( $variable1, \'default value\' ) );
// $variable = $variable ?: ( $variable1 = $variable1 ?: \'default value\' );
编辑: 附带说明,该函数还将为变量分配默认值,即使尚未定义。 如果您希望仅在未定义变量的情况下进行更新,则可以创建类似的函数,或将上面的函数修改为以下函数。
return $var = isset( $var ) ? $var : $default;}
    
        php是一个简单的php预处理程序,只需对包含运算符的php文件进行预处理,即可将所需的所有运算符转换为它的基础表示形式。 否则可悲的是php不是perl / lisp,因此您不能在运行时简单地将语言扩展到那种程度     

要回复问题请先登录注册