2013-01-23 141 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