【问题标题】:Semenantics help - PHP语义帮助 - PHP
【发布时间】:2016-04-22 20:45:24
【问题描述】:

我有一个代码('require_once' 部分无关紧要):

<?php
require_once('../shared/database.php');

class Administration{
    public $db;
    public $base;

    public function __construct(){
        $this->db=new Database();
        $this->base=new stdClass();
        $this->base->url="http://".$_SERVER ['SERVER_NAME'].'/phpp/blog/admin/';
    }
}
?>

下面写的代码正在实现代码(上面写的)。

<?php
require_once('administration.php');

class Articles extends Administration{
  public function __construct(){
    parent::__construct();} 

  $announcement='Some text.';           
  header('Location: '.$this->base->db.'articles.php?announcement='.urlencode($announcement));}
?>

有问题的部分是$this-&gt;base-&gt;db.

如果我将 db 变量名更改为任何其他有效的变量名,代码仍然有效,但我无法找出原因。

有人知道它是如何工作的吗?

【问题讨论】:

  • $this-&gt;base-&gt;db 是一个对象。除非你有 __toString 方法,否则将对象转换为字符串是很奇怪的。通过输出db 属性,您期望什么?
  • 如果你将url存储在$this-&gt;base-&gt;url中,为什么还要使用$this-&gt;base-&gt;db?你知道你的代码发生了什么吗?
  • 您在$announcement 行缺少开场白。
  • 致 u_mulder:我知道 db 是一个对象,但 db(对象)是 $this->db 变量,我写了 $this->base->db。您也可以使用 $this->base->XYZ ,它将使用存储在 $this->base->url 中的值。
  • U_mulder 的第二个帖子回复:我永远不会使用它。我在学习书中找到了它,但我找不到它是如何工作的。

标签: php this variable-assignment


【解决方案1】:

在我看来,代码有很多错别字。也许没有为环境启用错误报告,因为该代码不应该工作。伪变量$this 在对象上下文中可用。

<?php
require_once('administration.php');

$announcement='Some text.';
$administration = new Administration();
$location = sprintf('%sarticles.php?announcement=%s', $administration->base->url, urlencode($announcement));
header(sprintf('Location: %s', $location));

【讨论】:

  • 实际上我已经尝试简化代码,因为不重写数十行。所以我现在将通过实现带有父缺点的构造函数来纠正这个例子。打电话。
  • 确保代码正常工作。我可以在一些带有完整代码的网络存储 zip 文件中发布(来自学习书)。我有一个理论认为运算符 -> 实际上是 lamba,所以编译器简单提示我想调用 base->url 变量,因为这只是 var。在 base 上下文中包含(相关)值。
  • 我怀疑$this-&gt;base-&gt;some_random_name 为空,并且位置标头看起来像这样Location: articles.php?....。在这种情况下,服务器将在发出请求的路径下查找文件。
  • 致 Kaspars Primaks:这是一个答案。同时,我会尝试证明这一点。
  • 致 Kaspars Primaks:你完全正确。无论检查的变量如何,它都有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多