PHP模板函数不返回数据

PHP模板函数不返回数据,php,function,Php,Function,我制作了一个基本的PHP模板系统,由控制器/pages.PHP和视图/pages.PHP组成。视图使用控制器用应来自控制器的数据填充HTML,但是一些数据没有从控制器传递到视图我在下面的代码中标记了注释“#=>不工作”任何带有此类注释的内容都不会向视图返回任何数据任何关于可能原因的建议 <?php # THIS IS CONTROLLERS/PAGES.PHP class Page { private $title, $stylesheets=array(), $javascr

我制作了一个基本的PHP模板系统,由控制器/pages.PHP视图/pages.PHP组成。视图使用控制器用应来自控制器的数据填充HTML,但是一些数据没有从控制器传递到视图我在下面的代码中标记了注释“#=>不工作”任何带有此类注释的内容都不会向视图返回任何数据任何关于可能原因的建议

<?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();
    }
}
数据的调用方式 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');

- 
版权及副本


当您应该返回
$this
时,您正在返回
this

打开错误报告,您将看到有关尝试
返回此
的错误


其次,如果要调用方法,请调用它:


我不知道您期望的结果是什么,因为
listCSS()
返回
$this
(您调用方法的对象)。

您调用方法就像调用属性一样

$this->setCopyright
更改为
$this->setCopyright()
,依此类推

class Page {
    private $title;

    function setCopyright() {
        ...
    }
}

$page = new Page();
$title
是一个属性,请通过
$page->title
访问它
setCopyright()
是一个函数,请通过
$page->setCopyright()
(带括号)访问它


顺便说一句,在定义对象构造函数时,使用
function\uu construct()
比使用
function Page()

返回此
-你的意思是
返回$this
?@mceproper-Ahe之前没有发现我错过了$this,实际上,我修复了返回$this仍然没有返回setAppName、setCopyright、listCSS和ListJS的数据您是如何测试变量(内容)的?使用
var\u dump()
?@mceproperty我想我知道是什么导致了问题错误\u报告在第15行返回未定义的属性:Page:$listCSS@views/pages.php,在第17行返回未定义的属性:Page:$listJS@views/pages.php,与第25行的setCopyright相同,我在任何地方都看不到任何页面实例的构造,使用关键字
new
。实际上我更新了我更改过的代码,返回this->return$this,但是setAppName、setCopyright、listCSS和listJS函数仍然没有提取任何内容。显示您正在调用这些方法,并且如何检查没有返回任何内容?需要_once('controllers/pages.php')$页面=新页面$页面->设置标题(“主页”)$页面->开始正文()$页面->结束体();echo$page->render('views/pages.php');我添加了index.php和views/pages.php,这应该澄清index.php或任何其他页面是如何从controller/pages.php和views/pages.phpSee更新中生成的。我认为你需要回到OOP的基础上。
<?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>
$this->listCSS();
              ^^
class Page {
    private $title;

    function setCopyright() {
        ...
    }
}

$page = new Page();