2

したがって、これは少し複雑に聞こえるかもしれません。指が交差しました 私ははっきりと出くわします。

PHP の MVC フレームワークで作業しています。

ヘルパーを呼び出すコントローラー /report/index をロードします

<? class ReportController extends Controller { 
        public function index() {
            $foo = MainReport::get_data($_REQUEST);
        }

   }
 ?>

ヘルパーの内部

<? class MainReport extends foo {
        public function get_data($_REQUEST) {
            // do stuff
            return $stuff_done;
        }

 }
?>

私はそれを次のように実行します^これはすべて順調です。残念ながら、次のように実行したいと思います。

<? class MainReport extends foo {
        private function do_stuff() { 
            // do even better stuff here!
            return $better_stuff;
        }
        public function get_data($_REQUEST) {
            // do stuff
            $x = $this->do_stuff();    
        }

 }
?>

残念ながら...他の場所から呼び出したクラス内からプライベート関数を呼び出そうとすると...(うわー、それは一口です)...すべてが死にます。非常にひどく死ぬので、エラーも発生しません。

ある種の信じられないほど厄介な構文の問題を抱えていることは明らかです...しかし、クラス内からプライベート関数に正しくアクセスするにはどうすればよいですか?

次のようなものかもしれません: self::do_stuff();

プライベート クラス変数の宣言とアクセスについてはどうでしょうか。

 private $bar = array();

どんな助けでも大歓迎です。

4

2 に答える 2

7

静的コンテキストから関数を呼び出しています。

MainReport::get_data($_REQUEST)

したがって、その関数内では $this は存在しません。

静的コンテキスト内で別のクラス関数を呼び出したい場合は、それも静的に呼び出す必要があります。

すなわち

public function get_data($_REQUEST) {
        // do stuff
        $x = MainReport::do_stuff();    
    }

または、元の呼び出しでクラスのインスタンスを作成し、そのインスタンスを使用できます。

$myMainReport = new MainReport();
$myMainReport->get_data($_REQUEST);

その後、クラスコードは期待どおりに機能します

于 2010-09-07T20:53:56.113 に答える
1

self:: も機能することがわかりました

プライベート クラス変数が必要な場合は、次のように宣言してアクセスできます。

private static $foo

self::$foo = "foo";

さらに、プライベート関数にアクセスできます

self::function_foo();
于 2010-09-08T14:02:02.820 に答える