0

PHP OO でページを介してパラメーターを使用することについて、私は非常に混乱しています。フレームワークの作成に関するチュートリアルに従っています (これは Zend フレームワークに似ています)。しかし、私が理解していないのは、これがいつ起こるかです:

例、インデックス:

// File: sourcefiles/index.php

define('DS', DIRECTORY_SEPARATOR);
define('ROOT', realpath(dirname(__FILE__)).DS );
define ('APP_PATH',(ROOT.'aplicacion'));

require_once APP_PATH. DS.'Config.php';
require_once APP_PATH. DS.'Request.php';
require_once APP_PATH. DS.'BootStrap.php';
require_once APP_PATH. DS.'Controller.php';
require_once APP_PATH. DS.'View.php';

try
{
    BootStrap::run(new Request());

私は持っている:

 // File: sourcefiles/controladores/IndexController.php
 <?php
        class IndexController extends Controller
        {
            public function __construct() {
                parent::__construct();
            }

            public function indexAction() 
            {
                 $this->view->titulo='Homepage';
                 $this->view->contenido='Whatever';
                 $this->view->renderizar('index');   
            }
        }
   ?>

この:

// file : sourcefiles/aplicacion/View.php
<?php

class View
{
    private $controlador;
    private $layoutparams;

    public function __construct(Request $peticion)
    {
        $this->controlador = $peticion->getControlador();
    }

    public function renderizar($vista,$item=false)
    {
        $rutaview = ROOT.'vistas'.DS.$this->controlador.DS.$vista.'.phtml';

        if (is_readable($rutaview))
        {
            include_once $rutaview;
        }
        else
        {
            throw new Exception('Error de vista');
        }
    }
}
?>

ビューは次のとおりです。

// file : sourcefiles/vistas/index/index.phtml

<h1>
    Vista index..
    <?php
    echo $this->titulo;
    echo $this->contenido;
    ?>
</h1>

今私の質問は次のとおりです。

IndexController はどのように行を使用できますか? $this->view->titulo = blabla; ビュー クラスには「titulo」属性がありません。しかし、私はそれを行うことができます。しかし、ここで奇妙なことに、 を呼び出した後にそれを行うと$this->view->renderizar('index')、エラーが発生します。

index.phtml ファイルはこれをどのように認識していますか? echo $this->titulo;include または require が呼び出されないため、混乱します。

ファイルでrequireまたはinclude呼び出しを行うと、requireまたはincludedファイルは呼び出し元の変数を知っていますか?

誰かが私にこれらを説明できるなら、私はそれを本当に感謝します:Dまたはこれに関する公式情報に関する議論に私をリンクしてください、またはこれはどのように呼ばれますか?

4

1 に答える 1

1

includeorrequire行は、あるファイルから別のファイルにコードを「コピーして貼り付ける」ものと考えてください。これは正確ではありませんが、ここで動作の一部を説明しています。

In sourcefiles/aplicacion/View.phpyou include sourcefiles/vistas/index/index.phtmlwhile within the function View->renderizar. そのため、すべてのコードは、index.phtmlその関数内でも行われているかのようにロードされます。$thisこれが、たとえば にアクセスできる理由です。

$this->view->titulo定義していないときの参照に関しては、これは PHP が怠惰にさせてくれます。他の変数と同様に、オブジェクトのメンバーは、メンションするとすぐに有効になり、間違いを犯した可能性があるという警告のみが表示されます。

于 2012-08-25T22:11:50.187 に答える