質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2876閲覧

new \stdClass(); したのに Warning: Creating default object from empty value が出てしまう

morimorimorio

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/12/08 05:35

編集2016/12/08 06:28

php

1class Controller { 2 3 private $_errors; 4 private $_values; 5 6 public function __construct() { 7 if (!isset($_SESSION['token'])) { 8 $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(16));//32桁の文字列作る 9 } 10 $this->_errors = new \stdClass(); 11 $this->_values = new \stdClass(); 12 } 13 14 protected function setValues($key, $value) { 15 $this->_values->$key = $value; // 20行目 16 } 17 181920

で、以下のようなエラーが出ます。

error

1Warning: Creating default object from empty value in ・・・/Controller.php on line 20

エラーをググったら、$this->_values = new \stdClass(); をするんだよとしか書かれておらず、既に書いていたので困ってます。
PHPのバージョンは5.6.28です。

ソースコードは、ドットインストール( http://dotinstall.com/lessons/sns_php_v3/35815 )を参考にしてます。

追記

エラーが出たのは、Controllerクラスを継承した別クラスのメソッドからsetValues()を呼び出した時です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toutou

2016/12/08 05:52

検討違いならあれなんですが、newのあとの\っていらないんじゃないかな。
morimorimorio

2016/12/08 06:25

ご指摘ありがとうございます。\を外してみたら、"Fatal error: Class 'MyApp\stdClass' not found"とエラーが変わりました。Controllerクラスの定義前に、MyApp名前空間を設定していました。
guest

回答1

0

ベストアンサー

コード全体がないので、予想ですが...
Controllerを継承したクラスのコンストラクタ__construct()で親クラスのコンストラクタ__construct()を実行していないので初期化もれしているのではないかと
継承したクラスのコンストラクタ内に以下を追記したらどうでしょうか

php

1class MyController extends Controller { 2 function __construct() { 3 parent::__construct(); 4 } 5}

検証用に書いた同じWarningが発生するコード

php

1<?php 2class Controller { 3 4 private $_errors; 5 private $_values; 6 7 public function __construct() { 8 if (!isset($_SESSION['token'])) { 9 $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(16));//32桁の文字列作る 10 } 11 $this->_errors = new \stdClass(); 12 $this->_values = new \stdClass(); 13 } 14 15 protected function setValues($key, $value) { 16 $this->_values->$key = $value; // 20行目 17 } 18} 19 20class MyController extends Controller { 21 public function __construct() { 22 //以下の行を有効にすると発生しなくなる 23 //parent::__construct(); 24 } 25 public function set() { 26 $this->setValues('a', 'b'); 27 } 28} 29 30$c = new MyController(); 31$c->set();

投稿2016/12/08 07:23

編集2016/12/08 07:34
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問