当我从我的班级调用本地方法时,如下例所示,我是否必须将$this->
放在它之前?
示例:
class test{
public function hello(){
$this->testing(); // This is what I am using
testing(); // Does this work?
}
private function testing(){
echo 'hello';
}
}
我问的原因是因为我正在使用带有预定义PHP函数的array_map函数,现在我将使用我定义的函数。这就是我的意思:
class test{
public function hello(){
array_map('nl2br',$array); // Using predefined PHP function
array_map('mynl2br',$array); // My custom function defined within this class
}
private function mynl2br(){
echo 'hello';
}
}
答案 0 :(得分:7)
是的,这是必需的。 testing()
引用该名称的全局函数,如果该函数不存在,将导致错误。
但是,您可以使用$this
变量进行“回调”。从the PHP manual可以看出,您需要创建一个数组,其中第一个元素是对象,第二个元素是方法名称。所以在这里你可以这样做:
array_map(array($this, 'mynl2br'), $array);
答案 1 :(得分:5)
自己测试:P
结果是testing();
没有被触发但$this->testing();
没有被触发。
testing();
仅指类外的函数。
<?php
class test{
public function hello(){
$this->testing(); // This is what I am using
testing(); // Does this work?
}
private function testing(){
echo 'hello';
}
}
function testing() {
echo 'hi';
}
$test = new test();
$test->hello(); // Output: hellohi
?>
请参阅@lonesomeday's answer了解问题的可能解决方案。
答案 2 :(得分:1)
为了使用类'方法作为回调,您需要传递包含对象实例和方法名的数组,而不是只方法名:
array_map(array($this, 'mynl2br'), $array);
而不是
array_map('nl2br', $array);
答案 3 :(得分:1)
或者您可以使用闭包:
array_map(function($el) { ...; return $result; }, $array);