2013-01-23 72 views
-2

我做了一個基本的PHP模板系統,由controllers/pages.phpviews/pages.php。該意見使用控制器來填充數據的HTML應該從控制器現身,但有些數據沒有被從控制器傳遞給意見標誌着我下面的代碼註釋爲這樣的「 #==> NOT WORKING「有這樣的評論的任何東西不會返回任何數據到意見任何建議可能是爲什麼?PHP模板函數不返回數據

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

查看/ 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> 
+2

'return this' - 你的意思是'return $ this'? –

+0

@MCEmperor Ahe在這之前沒有發現我錯過了$,實際上我修復它返回$這仍然沒有數據返回setAppName,setCopyright,listCSS和listJS – 10010010001011101111

+0

你是如何測試變量的(內容)?使用'var_dump()'? –

回答

0

您正在調用像屬性一樣的方法。

更改$this->setCopyright$this->setCopyright()等等。

class Page { 
    private $title; 

    function setCopyright() { 
     ... 
    } 
} 

$page = new Page(); 

$title是一個屬性,通過$page->title訪問它。
setCopyright()是一個函數,通過$page->setCopyright()(括號)進行訪問。

順便說一句,定義對象構造函數時使用function __construct(),這比使用function Page()更好。

0

您正在返回this當你應該返回$this

打開錯誤報告,你會看到關於嘗試return this的錯誤。


其次,如果你想呼叫一個方法呼叫它:

$this->listCSS(); 
       ^^ 

我不知道你看到什麼樣的結果是,因爲listCSS()回報$this (你稱之爲方法的對象)。

+0

其實我更新了代碼,我確實改變了返回this - > return $ this,但是仍然沒有爲setAppName,setCopyright,listCSS和listJS函數拉動 – 10010010001011101111

+0

你怎樣調用*那些方法以及如何檢查沒有返回? – deceze

+0

require_once('controllers/pages.php'); $ page = new Page; $ page-> setTitle('Home'); $ page-> startBody(); $ page-> endBody(); echo $ page-> render('views/pages.php'); – 10010010001011101111