访问后未定义的变量/空属性错误

Posted

技术标签:

【中文标题】访问后未定义的变量/空属性错误【英文标题】:Undefined variable/empty property error after access 【发布时间】:2016-05-08 10:29:56 【问题描述】:

这让我发疯了,我希望有人能提供帮助。

我正在学习 php,作为一个更大的项目的一部分,为了帮助我调试/记录问题,我创建了一个 PHP 错误记录类。

这是我的错误:

这是一个测试

我希望它成功了!

成功了!

注意:未定义变量:/Applications/MAMP/htdocs/errorlog.php 第 27 行中的 errorLog

致命错误:无法访问第 27 行 /Applications/MAMP/htdocs/errorlog.php 中的空属性

所以我可以看到

第 27 行的错误包括:

$outputStringForSQL = $conn->escape_string($this->$errorLog);

我被难住了。我不明白$errorLog 是如何未定义的,因为它显然已使用append() 方法添加到两次,并使用returnLog() 方法读取。属性$errorLog 显然不是空的,因为returnLog() 可以很好地读取它。我通过回显它检查了$this->errorLog 是否为空。

我想也许我误解了范围,所以将 $erroLog 设置为 public,仍然没有。

这里是errorlog.php类'errorlog':

<?php
class errorlog

protected $errorLog;

public function append($string)
  $this->errorLog = $this->errorLog . $string . "<br />";


public function returnLog() 
  echo $this->errorLog;
  return "Success!";


public function commit()
  global $_mysqlUsername;
  global $_mysqlPassword;

  $servername = "localhost";
  $dbname = "my_DB";    //production

    // Create connection
  $conn = new mysqli($servername, 'root', 'root', $dbname);
    // Check connection
  if ($conn->connect_error) 
       die(error_log($conn->connect_error));
   
   $outputStringForSQL = $conn->escape_string($this->$errorLog);
   $sql = "INSERT INTO `tblDebugLog` (`ID`, `dateTime`, `debugData`) VALUES (NULL, CURRENT_TIMESTAMP, '$outputStringForSQL');";
   if ($conn->query($sql) !== TRUE) 
     echo("Error: " . $sql . "<br>" . $conn->error);
   
   $conn->close();
   return 'Success';
   

?>

这是使用 'errorlog' 类的脚本:

<?php
   function __autoload($class)
      require "$class.php";
   

   $myError = new errorlog;
   $myError->append('This is a test');
   $myError->append('I hope it worked!');
   echo $myError->returnLog();
   echo $myError->commit();
 ?>

谁能解释一下这个错误?

非常感谢。

【问题讨论】:

【参考方案1】:

$this-&gt;$errorLog 替换为$this-&gt;errorLog

【讨论】:

以上是关于访问后未定义的变量/空属性错误的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的引用错误:应用引导模板后未定义 $

Vue.js 变量在传递给另一个组件后未定义

多次调用打印函数后未定义的行为

Angular2-meteor - 在订阅函数中使用排序的 find() 后未定义的变量

Vue2自定义指令改变DOM值后未刷新data中绑定属性的值

错误 CS0012:“ConnectionStringSettings”类型是在升级到 Visual Studio 2015 后未引用的程序集中定义的