我发现自己在PHP上使用以下代码进行默认分配
$variable = $variable ? $variable : 'default value';
我知道用5.3我可以做到
$variable = $variable ?: 'default value';
我想通过能够做到
来进一步简化它$variable ?= 'default value';
并重新分配变量,以防它的计算结果为false。是否可以创建该作业?我是否必须编译自己的php版本才能做到这一点?
答案 0 :(得分:20)
如果不更改PHP源代码,则无法在PHP中创建新运算符。
你不想改变它,相信我。当然,它很容易 - PHP是开源的并使用你可以轻松修改的straightforward LALR(1) parser - 但这会使你的代码与标准的PHP实现不兼容。因此,您将非常限制谁可以运行代码 - 这可能是除了您之外的任何人,因为没有其他人会关心修改他们的PHP引擎只是为了运行您的代码。
更新:我写了一篇关于如何向PHP添加新语法(如运算符)的小教程:http://nikic.github.com/2012/07/27/How-to-add-new-syntactic-features-to-PHP.html
答案 1 :(得分:1)
在PHP中,您无法创建运算符或重载现有运算符,例如=
。
您可以查看包Operator,但是,您的代码将无法通过它运行。
答案 2 :(得分:0)
你可以使用一个功能:
<?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
答案 3 :(得分:0)
您不能在PHP中执行此操作,而不能使用此语法。
<?
$test = array("3 is 5", "3 is not 5");
$r = $teste [+( 3 != 5)];
echo $r; //return "3 is not 5"
?>
答案 4 :(得分:0)
在想知道是否可以创建新操作时,这似乎是最常见的一个例子。我个人认为?=会非常方便。
由于创建新的运算符会涉及创建自己的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;}
答案 5 :(得分:0)
简单,php是一个php预处理器,只需预处理包含运算符的php文件,将所需的所有运算符转换为它的底层表示。
否则很遗憾php不是perl / lisp所以你不能简单地在运行时将语言扩展到那个程度