【发布时间】:2016-07-31 05:01:36
【问题描述】:
我知道这是常见错误,我已阅读所有答案,但我的情况看起来不同,至少作为 PHP 新手,请不要根据问题主题决定行动。
我有一个可以工作的 PHP 代码,但我正在尝试将它安排在适当的函数中,如下面的代码所示,但我收到以下错误 Warning: Creating default object from empty value in /home/abc/vhosts/localhost/public/portfolio.php on line 16:
<?php
// configuration
require("../includes/config.php");
// prepare portfolio object
$portfolioObject = (object) ["portfolioSummaryArr" => [], "cashInHand" => ""];
function getCashInHand(){
// query database to get cash in hand
$rows = CS50::query("SELECT cash FROM users WHERE username = ?", $_SESSION["username"]);
// get first (and only) row
$row = $rows[0];
$portfolioObject->cashInHand = $row["cash"];
$portfolioObject->portfolioSummaryArr = [11, 22, 33, 44, 55];
}
getCashInHand();
?>
现在在阅读了所有答案和文档之后,我认为我首先需要某种对象,所以我这样做了,然后我收到了这个错误 Parse error: syntax error, unexpected '$myObject' (T_VARIABLE) in /home/abc/vhosts/localhost/public/portfolio.php on line 12。我相信这一点,因为在 JS 中允许类似的东西并且它可以工作,但在 PHP 中的猜测不是,所以我的猜测是使用这样创建的对象你不能定义或访问函数。
$myObject = new stdClass();
$myObject->demoFunction = function(){
echo "I am coming from demo function.";
}
$myObject->demoFunction();
对我来说,事情变得更有趣了,因为如果我在 require("../includes/config.php"); 之后在我的代码中执行以下操作,那么它可以工作并且没有错误,但是我的第一个代码 sn-p 中所示的函数定义和访问不起作用。
// Defining function
function whatIsToday(){
echo "Today is XXX";
}
// Calling function
whatIsToday();
【问题讨论】:
-
简短的回答是:变量范围。
-
@Dagon 感谢您的提示。我创建了
$myObject = new stdClass();一个全局对象,然后将portfolioObject定义为$myObject->portfolioObject = (object) ["portfolioSummaryArr" => [], "cashInHand" => ""];并以$myObject->portfolioObject->cashInHand = $row["cash"];访问,但仍然是同样的错误。我想现在我可以通过我的全局myObject对象访问portfolioObject? -
查看this answer 以获取有关如何调用您的方法的信息。但是
unexpected $myobject是由于函数定义后缺少;。在普通函数 def 中,;在}之后不会有终止,但你的是匿名函数的变量赋值。这是 PHP 在此处需要;的语句...$myObject->demoFunction = function(){...}; -
另外,如果您使用
array(x,y,z,...)而不是括号表示法声明数组,则您不必做任何(object)的事情。 -
@Dagon 谢谢先生最初的提示,我明白了,并为未来的访客发布了我的答案。
标签: php