php - 我可以使用私有(private)实例方法作为回调吗?

标签 php callback encapsulation

我的特定场景涉及在私有(private)方法中使用正则表达式进行一些文本转换。私有(private)方法调用 preg_replace_callback,但似乎回调需要在对象上公开,所以我坚持要打破私有(private)世界并在我不愿意的时候公开实现细节。

所以,简而言之:我可以在不丢失封装的情况下使用实例方法作为回调吗?

谢谢。

最佳答案

是的,看来你可以:

<?php

//this works
class a {
   private function replaceCallback($m) { return 'replaced'; }

   public function test() {
        $str = " test test ";
        $result = preg_replace_callback('/test/', array($this, 'replaceCallback'), $str);
        echo $result;
   } 
}

$a = new a();
$a->test();


//this doesn't work
$result = preg_replace_callback('/test/', array(new a(), 'replaceCallback'), ' test test ');    
echo $result;

所以看起来 preg_replace_callback(),或者 PHP 的回调机制,知道它被调用的范围。

在 5.2.8 上测试

关于php - 我可以使用私有(private)实例方法作为回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1028035/

相关文章:

php - 在php中更改字体

php - SQL 日期错误,上传单独日期和时间的正确格式是什么?

java - 我们可以在javafx中的多个类之间创建回调吗

java - 可见性标准的解释(尤其是 Java 与 UML)

oop - OO设计封装

java - 为什么静态方法可以调用私有(private)方法?

php - 有什么理由不对电子邮件地址使用 bcrypt?

php - 如何使用 PHP 获取正确格式的 JSON 数据

tensorflow - Tensorflow 中的回调

angular - 如何创建从回调函数返回 promise 的函数