2016-04-10 10 views
0

これは一般的なエラーで、私はすべての答えを読みましたが、少なくともPHPの初心者のように私のケースは異なって見えるので、 。警告:空の値からデフォルトオブジェクトを作成する - 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");後に私のコードで以下のように行うならば、それが動作するため、より面白くないとエラーが、私の最初のコードスニペットに示すように、関数の定義とアクセスは動作しません。

// Defining function 
function whatIsToday(){ 
    echo "Today is XXX"; 
} 
// Calling function 
whatIsToday(); 
+1

短い答えは可変範囲です。 –

+0

@Dagonヒントをありがとう。グローバルオブジェクトである '$ myObject = new stdClass();'を作成し、 'portfolioObject'を' $ myObject-> portfolioObject =(object)["portfolioSummaryArr" => []、 "cashInHand" => ""] ; '$ myObject-> portfolioObject-> cashInHand = $ row [" cash "];'としてアクセスしますが、それと同じエラーです。私はグローバルな 'myObject'オブジェクトを通して' portfolioObject'にアクセスできましたか? – hagrawal

+1

レビュー[この回答](http://stackoverflow.com/questions/2938004/how-to-add-a-new-method-to-a-php-object-on-the-fly)あなたのメソッドを呼び出します。しかし、 '予期しない$ myobject'は、関数定義の後に'; 'がないためです。通常の関数defでは、 '}'の後に ';'を終端しませんが、あなたのものは無名関数の変数代入です。 $ myObject-> demoFunction = function(){...}; '<--- –

答えて

0

これはちょうど時間の問題でした。私は、PHPのオブジェクト指向を活用するためにいくつかの読書をしなければなりませんでした。以下は、私のPHPのエラーと警告をすべて解決する方法です。言うまでもなく、私のお気に入りのデバッグ手法である "screen to terminal/print"は、PHPの場合にはechoを使用すると多くの助けになりました。

<?php 

    // configuration 
    require("../includes/config.php"); 

    class portfolio{ 
     public $portfolioObject; 

     public function __construct(){ 
      echo "__construct()</br>"; 
      $this->portfolioObject = new stdClass(); 
     } 

     public function initialize(){ 
      echo "initialize()"; 
      $portfolioObject = (object) ["portfolioSummaryArr" => [], "cashInHand" => ""]; 
     } 

     public 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]; 

      $this->portfolioObject->cashInHand = $row["cash"]; 
      $this->portfolioObject->portfolioSummaryArr = [11, 22, 33, 44, 55]; 
     } 

     public function setSessionObject(){ 
      $_SESSION["portfolioSummaryResults"] = $this->portfolioObject; 
     }  
    } 

    $myPortfolio = new portfolio(); 
    $myPortfolio->initialize(); 
    $myPortfolio->getCashInHand(); 
    $myPortfolio->setSessionObject(); 

    render("portfolio/portfolio_results.php", ["title" => "Portfolio"]); 

?> 
関連する問題