0

私は管理者クラスを持っています:

<?php
    Class Admin extends Controller{


        function __construct() {
            parent::__construct();
        }

            function getPage(){
                $num = 5;
                $this->view->load('test');
            }

    }
?>

拡張Controllerクラス:

<?php

class Controller{

    function __construct() {
        $this->view = new View();
    }

}

?>

クラスを表示:

<?php
Class View{

    function __construct() {

    }

    public function load($file){
        include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php');
    }

}
?>

だからtest.phpファイルで私はしようとしますecho $num;が、私は何も得られません...

やってみたら

$num = 5;
include($_SERVER["DOCUMENT_ROOT"].'/main/views/test.php');

エコーバック5

ここで問題は何ですか?

4

2 に答える 2

1

連想配列を渡しloadてオプションのパラメーターとして機能させ、extractその配列を使用してスコープ内に変数を含めることができます。

public function load($file, $data = array()){
    extract($data);

    include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php');
}

または

public function load($file, $data = array()){
    foreach ($data as $key => $val)
        ${$key} = $val;

    include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php');
}

私の個人的な経験が示すように、2番目の方法は少し速いです。

関数getPage()であなたがする必要があるのは:

$this->view->load('test', array('num' => 5));
于 2012-10-08T16:03:18.397 に答える
0

$ numスコープは関数getPageにローカライズされており、オブジェクトの一部として作成されることはありません。関数を変更して関数getPage()を作成し、$ numを返し、test.phpからエコーするか、コードを次のように書き直すことができます。

<?php
        Class Admin extends Controller{


            function __construct() {
                parent::__construct();
            }

            public $num = 5;

            function getPage(){
                    $this->load->view('test');
                }

        }

    class Controller{

        function __construct() {
            $this->view = new View();
        }

    }

    Class View{

        function __construct() {

        }

        public function load($file){
            echo "I shall skip the file include";
        }

    }

    $test = new Admin();
    echo $test->num;

    ?>

あなたはこれを見たいかもしれません:http ://www.php.net/manual/en/language.oop5.visibility.php

これにより、将来実装できる可視性オプションがわかります。

于 2012-10-08T16:15:21.033 に答える