1

我的类.php

class myclass {

private $name;

public function showData(){
    include_once "extension.php";

    otherFunction($this);

}

private function display(){
    echo "hello world!";
}

}

扩展名.php

function otherFunction($obj){

    if(isset($obj){
   $obj->display();
    }

}

好的,这就是问题所在,对于你们中的一些人来说,很明显我正在从包含文件调用私有方法,这显然会引发错误。我的问题是:

1. 有没有一种方法可以让包含文件使用外部函数来调用私有方法?

2. 我如何使用包含的文件来访问私有方法,并通过这样做将我的函数扩展到另一个文件,而不会使我的类文件变得如此臃肿且包含许多函数?

3. 这可能吗?

谢谢

4

1 回答 1

2

如果您使用的是 PHP 5.3,是的,这是可能的。

它被称为反射。根据您的需要,您需要 ReflectionMethod

http://us3.php.net/manual/en/class.reflectionmethod.php

这是一个例子

<?php

//  example.php
include 'myclass.php';

$MyClass = new MyClass();

//  throws SPL exception if display doesn't exist
$display = new ReflectionMethod($MyClass, 'display');

//  lets us invoke private and protected methods
$display->setAccesible(true);

//  calls the method
$display->invoke();

}

显然,您需要将其包装在 try/catch 块中,以确保处理异常。

于 2011-06-18T16:56:05.177 回答