PHP手册说明
$this在PHP 5.4.0之前无法使用匿名函数
在匿名功能页面上.但我发现我可以通过赋值$this给变量并将变量传递给use函数定义中的语句来使其工作.
$CI = $this;
$callback = function () use ($CI) {
$CI->public_method();
};
Run Code Online (Sandbox Code Playgroud)
这是一个好习惯吗?
有没有更好的方法来$this使用PHP 5.3 访问匿名函数?
版本5.5之前的PHP没有最终块 - 即,在大多数敏感语言中,您可以执行以下操作:
try {
//do something
} catch(Exception ex) {
//handle an error
} finally {
//clean up after yourself
}
Run Code Online (Sandbox Code Playgroud)
PHP没有finally块的概念.
任何人都有解决这种语言相当恼人的漏洞的经验吗?
我试图通过匿名函数转储对象的私有属性的元素 - 当然我可以通过许多其他方式实现这一点,但这突出了一个PHP难题,我无法解决我的头脑,缺乏$ foo = $ this和使用$ foo - 但这不会给我私人的东西,所以...建议?
示例代码:
class MyClass
{
private $payload = Array( 'a' => 'A element', 'b' => 'B element');
static $csvOrder = Array('b','a');
public function toCSV(){
$values = array_map(
function($name) use ($this) { return $this->payload[$name]; },
self::$csvOrder
);
return implode(',',$values);
}
}
$mc = new MyClass();
print $mc->toCSV();
Run Code Online (Sandbox Code Playgroud) 对于 JavaScript,我们可以这样做,将作用域绑定到所需的函数:
\nfunction myFunction() {\n alert(this.foo);\n}\n\nvar MyClass = function () {\n this.foo = 1;\n};\n\nvar c = new MyClass();\nmyFunction.call(c); // `1`\nRun Code Online (Sandbox Code Playgroud)\n我想使用 PHP 做同样的事情。目前,我所看到的成功工作是这样的,但这仅适用于匿名函数:
\n$my_function = function () {\n var_dump($this->foo);\n};\n\nclass MyClass {\n public $foo = 1;\n};\n\n$c = new MyClass();\nClosure::bind($my_function, $c)();\n\n// Or\xe2\x80\xa6\n// $my_function->call($c);\nRun Code Online (Sandbox Code Playgroud)\n这不起作用:
\nfunction my_function() {\n var_dump($this->foo);\n}\n\nclass MyClass {\n public $foo = 1;\n};\n\n$c = new MyClass();\nClosure::bind('my_function', $c)(); // :(\ncall_user_func([$c, 'my_function']); // :(\nRun Code Online (Sandbox Code Playgroud)\n