2011-06-18 67 views
1

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

問題不在於包含的文件 - 問題是您正在調用一個不在類範圍內的函數(包含的文件本身就是)。 – NikiC

+2

私人是私人的。如果你需要在課堂外召集,它必須是公開的。或者讓它保護並擴展一個其他函數()所屬的子類 –

+0

我也鼓勵你注意上面給出的兩個註釋。 – Melsi

回答

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塊來包裝是爲了確保異常得到處理。

+0

這樣做總的意義。 –

相關問題