从包含文件中调用private或protected方法

时间:2011-06-18 16:39:17

标签: php include private-methods class-visibility

myclass.php

class myclass {

private $name;

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

    otherFunction($this);

}

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

}

extension.php

function otherFunction($obj){

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

}

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

1。有没有一种包含文件的方式     可以使用外部函数来调用     私人方法?

2。我怎么能使用包含的文件     访问私有方法并通过执行     所以将我的功能扩展到另一个     文件没有我的类文件所以     臃肿了许多功能?

第3。这甚至可能吗?

由于

1 个答案:

答案 0 :(得分: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块中以确保处理异常。