PHP-包含后看不到类成员

标签 php class object scope members

好的,我有一个 index.php:

<?php
require 'php/stdlib.php';


$site->page->render();


 foreach($page as $var => $value) {
    echo $var ." is ". $value." <br/>";
 }
?>

站点和页面的 obj 创建在 stdlib 文件中,显然可以正常工作,因为 -for each- 循环打印出:

name is welcome 
headers is inc/index_h.php 
footers is inc/index_f.php 
contents is inc/welcome.php 

表示对象已经创建。 我还做了一个 var dump 并得到了正确的结果 这是网站---页面---呈现:

   public function render_page(){

    $this->page->render();
}

这是页面---渲染:

 public function render(){

        include $this->headers;
        include $this->contents;
        include $this->footers;
    }

但是脚本的结果如下:

undefined variable :

还有

尝试获取非对象的属性: 这两个错误都指向我在页眉包含文件中使用的 $page 对象:

 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="UTF-8">
 <title><?php echo $page->name; ?></title>
 <script src="/scripts/jquery.js"></script>

 </head>

 <body>

错误实际上是在 html 标题标签中打印出来的,而不是在屏幕上,这意味着我必须在浏览器上使用“查看源代码”才能看到它 使用包含时如何使 $page 对象可见 我通常很擅长自己寻找答案,但这件事让我难过了两天。(我在寻找答案的过程中学到了很多其他东西,所以我想并不是所有的东西都丢失了)如果有人能帮助我,我将不胜感激它。

可能应该添加页面和站点对象在 stdlib.php 中用以下内容实例化

$site = new csite();   
site_ini($site);   
$page = new cpage("welcome");  
$site->setPage($page);

最佳答案

当您使用 PHP 的内置 include函数,包含文件的内容在与调用 include 相同的范围内执行.因此,你真的很想调用 $this在包含的文件中,因为它们的代码被执行,就好像它实际上是写在 inside render() 中一样方法,你会注意到没有 $page在该方法中声明了变量。

另一方面,设置$page = $this 可能在句法上更有意义在第一个 include 之前.

我给你投了赞成票,因为虽然标题没有暗示它,但你实际上强调了 PHP include 的一个重要方面。和 require函数:它们传递作用域的方式。

有关此主题的更多信息,请仔细阅读有关该函数的 PHP.net 文档: http://www.php.net/manual/en/function.include.php

编辑:为了阐明为什么一个示例有效,而另一个示例无效,这是因为来自 include 的 $page 与您的 foreach 具有相同的范围,但未在渲染内部声明。

但是,不要将其作为全局变量引入。从句法上讲,你想渲染你调用渲染的页面,所以:$this

关于PHP-包含后看不到类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23002695/

相关文章:

php - 使用 php 将复选框输入插入 postgresql

php - 函数中的全局 PHP 类?

Javascript 类和范围

javascript - 在 typescript 中创建变量时如何在属性值中传递变量

javascript - 从对象的内联函数中访问 this

javascript - 如何将价格与金额相乘?

php - 使用 PHP 和 JavaScript 下载状态

php - 在多个查询中应用相同规则的最佳方法是什么?

c++ - 使用友元函数重载算术运算符

javascript - 从 CasperJS 中的嵌套 JavaScript 对象获取值