PHPの致命的なエラー:を$ことがないcontextオブジェクト
-
23-09-2019 - |
質問
私の問題:
書い新しいWebAppな枠組み
私の index.php を使用してい: require_once('load.php');
や load.php を使用してい require_once('class.php');
ローマ class.php.
私の class.php またこのエラー:
致命的なエラー:を$ことがないオブジェクトにコclass.php に行---(この例で11)
例か class.php 書き:
class foobar {
public $foo;
public function __construct() {
global $foo;
$this->foo = $foo;
}
public function foobarfunc() {
return $this->foo();
}
public function foo() {
return $this->foo;
}
}
私の index.php 私は荷か foobarfunc()
このように:
foobar::foobarfunc();
ることもでき
$foobar = new foobar;
$foobar->foobarfunc();
なぜそのようなエラー。
解決
私のindex.phpでは、私は多分ロードしています このようなfoobarfunc():
foobar::foobarfunc(); // Wrong, it is not static method
もすることができます。
$foobar = new foobar; // correct
$foobar->foobarfunc();
あなたはこのようにすることはできません呼び出し方法、それは静的メソッドではありませんので。
foobar::foobarfunc();
あなたが代わりに使用する必要があります:
foobar->foobarfunc();
あなたのような静的メソッドの何かを作成しているしかし、もします:
static $foo; // your top variable set as static
public static function foo() {
return self::$foo;
}
、あなたはこれを使用することができます:
foobar::foobarfunc();
他のヒント
話の非staticメソッド:
public function foobarfunc() {
return $this->foo();
}
用静電話:
foobar::foobarfunc();
使用時の静的コの関数が呼び出されます (でもない場合として宣言された static
), ではありませんのオブジェクトのインスタンスあり $this
.
い:
- ご利用するべきではありません静電話のための非staticメソッド
- おける静的メソッド(または静的-という方法は使用できませんのこと、通常のポイントを現在のクラスのインスタンスがクラスのインスタンスが静的-発信します。
この方法のクラスのクラスのインスタンスのもとでは、アクセスする必要 $foo
件のクラスです。
当然のことながら、お客様の手法が必要なクラスのインスタンス--ることはできません。
こんに使用静電話:すべinstanciateのクラスのオブジェクトの方法のように、また最後の部分のコード:
$foobar = new foobar();
$foobar->foobarfunc();
詳し情報は、迷わずお読み、PHPマニュアル:
もだいていないのかもしれません必要なこともできます __construct
方法:
global $foo;
を使用 global
キーワード の $foo
変数の宣言された以外の全ての機能とクラスvisibileから内側の方法が...おそらくいな $foo
可変となります。
へのアクセス $foo
クラスの物性, の一部だけを利用する必要が $this->foo
, いました。
あなたは解決スコープ演算子でfoobarfunc
を起動している場合(::
)、その後、あなたはそれを呼び出している静的に、例えば代わりに、インスタンスレベルのクラスレベルで、これあなたがいないときにオブジェクトコンテキストでの$this
を使用して、のです。 $this
は、クラスのコンテキスト内に存在しません。
あなたはE_STRICT
を有効にした場合、PHPは、このことについての通知が発生します。
Strict Standards:
Non-static method foobar::foobarfunc() should not be called statically
の代わりにこれを行ってください。
$fb = new foobar;
echo $fb->foobarfunc();
追記で、私はあなたのクラス内global
を使用しないようお勧めします。あなたはクラスの中の外から何かが必要な場合は、コンストラクタを通してそれを渡します。これはhref="http://en.wikipedia.org/wiki/Dependency_injection" rel="noreferrer">依存性注入する
最初にご理解いという $こ 内部クラスは、 現在のオブジェクト.
ることができたとしているため、海外のクラスで呼びクラスの機能または可変となります。
いときは呼び出しのクラスの機能などfoobar::foobarfunc()、オブジェクトが作成されます。その中で機能するい記述を返し$this->foo().こ$せなければなりません。.私がなぜそう を$ことがないオブジェクトにコclass.php
ソリューション
をオブジェクトを呼び出foobarfunc().
コfoo()を使用クラス名のfoobarfunc().
を呼び出すときは、機能の静脈 $this
単にお使いになれません。
ならば利用 this::xyz()
です。
う文脈だき機能を呼び出の両方を静的にオブジェクトインスタンスの良いアプローチの概要はこの質問: どのように伝えるかどうか私は静的またはオブジェクト?
高速方法:の(新しいfoobarに()) - > foobarfunc(); の
あなたは置き換えるあなたのクラスをロードする必要があります:
foobar::foobarfunc();
によるます:
(new foobar())->foobarfunc();
または
$Foobar = new foobar();
$Foobar->foobarfunc();
またはメイクの静的の使用foobar::
に機能ます。
class foobar {
//...
static function foobarfunc() {
return $this->foo();
}
}
$foobar = new foobar;
入 のクラス foobarに$foobar, のオブジェクト.のオブジェクトを追加する必要があります括弧: $foobar = new foobar();
おのエラーは単に呼び出する方法、クラスがありません $this
以降 $this
にのみ存在します。
ちょうどこのfoobar->foobarfunc();
を使用して、クラスのメソッドを使用します。