-2

私はcontrollers/pages.phpviews/pages.phpで作られた基本的なPHPテンプレートシステムを作りました。ビューコントローラーを使用して、コントローラーから送信されるはずのデータをHTMLに入力しますが、一部のデータがコントローラーからビューに渡されていません。以下のコードに「#==>NOTWORKING」などのコメントを付けました。コメントは、おそらく理由についての提案を表示するためのデータを返しませんか?

<?php

# THIS IS CONTROLLERS/PAGES.PHP

class Page {
    private $title, $stylesheets=array(), $javascripts=array(), $body;

    # ==> NOT WORKING
    function Site() {
        $site = "http://dev.site.tld/";
        return $site;
    }

    function Page() {
        $this->addCSS('css/main.css');
        $this->addCSS('css/font-awesome.css');
        $this->addJavascript('js/jquery.js');
        $this->addJavascript('js/application-build102121.js');
    }

    function setTitle($title) {
        $this->title = $title;
    }

    # ==> NOT WORKING
    function setCopyright() {
         $copyright_year = date("Y");
         return $copyright_year;
    }

    # ==> NOT WORKING
    function setAppName() {
         $app_name = "Latte";
         return $app_name;
    }

    function addCSS($path) {
        $this->stylesheets[] = $path;
    }

    # ==> NOT WORKING
    function listCSS($path) {   
        $data = Site(); 
        foreach ($this->stylesheets as $stylesheet) {
             echo '<link href="' . $data . $stylesheet . '" rel="stylesheet" type="text/css" />' . "\n";
        }
        return $this;   
    }

    # ==> NOT WORKING
    function listJS($path) {
        $data = Site();
        foreach ($this->javascripts as $javascript) {
             echo '<script src="' . $data . $javascript . '" type="text/javascript" defer="defer"></script>' . "\n";
         }  
        return $this;
    }

    function addJavascript($path) {
        $this->javascripts[] = $path;
    }


    function startBody() {
        ob_start();
    }

    function endBody() {
        $this->body = ob_get_clean();
    }

    function render($path) {
        ob_start();
        include($path);
        return ob_get_clean();
    }
}

Error_Reportingは

Notice: Undefined property: Page::$listCSS in /home/adminis1/public_html/dev/views/pages.php on line 15

Notice: Undefined property: Page::$listJS in /home/adminis1/public_html/dev/views/pages.php on line 17

Notice: Undefined property: Page::$setCopyright in /home/adminis1/public_html/dev/views/pages.php on line 25

データがIndex.phpと呼ばれる方法

<?php
require_once('controllers/pages.php');
$page = new Page;
$page->setTitle('Home');
$page->startBody();
?>

<img src="test-img.jpg" />

<?php
$page->endBody();
echo $page->render('views/pages.php');

VIEWS / PAGES.PHP

<?php error_reporting(E_ALL); ?>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title><?php echo $this-setAppName; ?> - <?php echo $this->title; ?></title>

    <!-- view port meta -->
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">


    <!--[if lt IE 9]>
        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <?php echo $this->listCSS; ?>

    <?php echo $this->listJS; ?>

</head>
<body>

    <?php echo $this->body; ?>

    <footer>
        <p>Copyright &copy; <?php echo $this->setCopyright; ?> </p>
    </footer>

</body>
</html>
4

2 に答える 2

0

あなたが戻るthisべきときにあなたは戻っています$this

エラーレポートをオンにすると、試行に関するエラーが表示されますreturn this


次に、メソッド呼び出したい場合は、次のように呼び出します。

$this->listCSS();
              ^^

(メソッドを呼び出しているオブジェクト)がlistCSS()返されるため、その結果がどうなるかわかりません。$this

于 2013-01-23T10:06:11.443 に答える
0

プロパティのようにメソッドを呼び出しています。

などに変更$this->setCopyright$this->setCopyright()ます。

class Page {
    private $title;

    function setCopyright() {
        ...
    }
}

$page = new Page();

$titleはプロパティです。からアクセスして$page->titleください。
setCopyright()関数$page->setCopyright()です。(角かっこを使用して)アクセスします。

ちなみに、 function __construct() オブジェクトコンストラクターを定義するときに使用するのは、を使用するよりも優れてい function Page()ます。

于 2013-01-23T10:25:01.867 に答える