从一个随机的php.net帖子:
如果你正在做$ whatever = null; 那么你正在重写变量的数据.您可能会更快地释放/缩小内存,但它可能会更快地从真正需要它们的代码中窃取CPU周期,从而导致更长的总体执行时间.
显然这是无可争议的事实,所以也许有人会如此善良地解释.
我的意思是,什么,unset神奇地没有执行任何汇编指令,$whatever = null;而是?如上所述,答案和说法一样有用
$ whatever = null重置缓冲区和L1缓存,而unset清除缓冲区并重置L2缓存.
Techno mumbo jumbo并不构成答案.
Class MyClass{
private $data=array('action'=>'insert');
public function insert(){
echo 'called insert';
}
public function run(){
$this->$this->data['action']();
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用:
$this->$this->data['action']();
Run Code Online (Sandbox Code Playgroud)
只有可能使用call_user_func();?
我的目标是在if()语句中放入一些复杂的逻辑.假设我有一个值数组,如果我的数组中的所有内容都非零,我将执行一些代码.通常情况下,我可以说,$valid = true,foreach我的阵列,并设置$valid = false当发现一个零.然后我会运行我的代码if ($valid).或者,我可以将我的循环放入一个函数中并将函数放在我的函数中if().
但是我很懒,所以我宁愿不要使用一堆"有效"标志,我宁愿不写一个只在一个地方使用的全新功能.
所以让我说我有这个:
if ($q = function() { return 'foo'; }) {
echo $q;
}
else {
echo 'false';
}
Run Code Online (Sandbox Code Playgroud)
我期待if得到的'foo',得分为真.我的闭包致力于$q并且语句执行.$q返回字符串foo,并打印'foo'.
相反,我得到了错误Object of class Closure could not be converted to string.
所以让我们试试这个:
if (function() { return false; }) {
echo 'foo';
}
else {
echo 'true';
}
Run Code Online (Sandbox Code Playgroud)
我期待我的函数返回false并打印'true'.相反,打印'foo'.
我正在采取的方式有什么问题?好像它在说,"是的,这肯定是一个功能!" 而不是"不,因为函数评估为假".有没有办法做我想做的事情?
当我运行以下代码作为condition_2匹配结果时,其内容$foo是一个闭包实例,但我想要该闭包应返回的结果。你怎么做到这一点?condition_1正在按预期工作。
$foo = match ($conditions) {
'condition_1' => 'some text',
'condition_2' => function () {
$result = '';
// crazy programming
return $result;
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
立即执行匿名函数
我想立即评估一个匿名函数,而不是它在方法args中作为Closure对象出现.这可能吗?
例如:
$obj = MyClass;
$obj->Foo(function(){return "bar";}); // passes a Closure into Foo()
$obj->Foo(function(){return "bar";}()); // passes the string "bar" into Foo()?
Run Code Online (Sandbox Code Playgroud)
第3行是非法语法 - 有没有办法做到这一点?
谢谢
可能重复:
javascript中自执行函数的目的是什么?
JS中的meens编写如下代码:
(function (window) { })(window);
Run Code Online (Sandbox Code Playgroud)
或这个:
(function () { })();
Run Code Online (Sandbox Code Playgroud) 有时在初始化变量时,您希望传递它们太复杂而无法在单个命令中计算的值,因此您通常先计算一个虚拟变量然后传递其值,或者在其他地方定义一个函数,并将其返回值传递给我们的变量.
我的问题(愿望)是,是否可以使用匿名函数动态计算变量?
例如,而不是使用这个:
$post = get_post();
$id = $post->ID;
$array = array(
'foo' => 'hi!',
'bar' => $id
);
Run Code Online (Sandbox Code Playgroud)
让我们使用这样的东西:
$array = array(
'foo' => 'hi!',
'bar' => (function(){
$post = get_post();
return $post->ID;
})
);
Run Code Online (Sandbox Code Playgroud)
代码完全是随机的.