2011-06-18 6 views
1

myclass.phpコールprivateまたはprotectedメソッドインクルードファイル

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

プライベートはプライベートです。あなたがクラス外でそれを呼び出す必要がある場合、それは公開されなければなりません。あるいは、それを保護して、 'otherFunction()'が属するサブクラスを拡張してください。 –

+0

私は上記の両方のコメントに注意を払うことをお勧めします。 – Melsi

答えて

2

あなたがPHP 5.3で作業している場合ははい、これが可能です。

これは反射と呼ばれています。あなたのニーズに合わせて、あなたはReflectionMethod

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

をしたいここで明らかにあなたは例外が処理されます保証するために、try/catchブロックでこれをラップしたいと思う例

<?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(); 

} 

です。

+0

これは完全に意味します。 –

関連する問題