オブジェクトインスタンスでプロパティを初期化しようとしていますが、「コンパイル時」に決定できる定数でのみ変数を初期化できます。
PHPマニュアルから- プロパティ
この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。
「実行時」の知識に依存する初期化は、いずれかを実行する必要があります。
- で動作するコンストラクター(これを実装する方法については@Dan-Leeの回答を参照)で
$this->doc
、
- たとえば、コンストラクターから呼び出される「イニシャライザー」関数内から (コンストラクターから実行される可能性のある他の「実際の作業」と「初期化」ステップを区別するためにこれを行う場合があります)、または
- クラスの消費者が手動で。消費者が操作する可能性があります
myProcessRoutes->doc = 'some other string'
プロパティまたはオブジェクト (例: ) に直接、
- オブジェクトへの関数呼び出しを介して、たとえば
myProcessRoutes.initialise_doc('some other string')
、または
- オブジェクトのセッターを介して-PHPでこれらを使用したことがないので、それらを調査させてください! ;-)
(ただし、インスタンス化/コンストラクターより後に発生するこれらのアプローチが本当に初期化である場合は、議論の余地があります/哲学的です)。
クラス コンストラクタ/デストラクタのポイントは、必要に応じてオブジェクト インスタンスを初期化/破棄できる「フック」を提供することです。
例に従って、いくつかの特定の新しいインスタンスを作成する必要があるだけかもしれません。その場合、コンシューマーからコンストラクターへの入力を受け入れる必要はありません。
または、クラスを適切に設定するために、いくつかの値を受け入れる必要がある場合があります。これは、呼び出しているときに、上記のサンプルコードでまさに起こっていることです
private $doc = new SimpleXMLElement('routingConfig.xml', null, true);
(つまり'routingConfig.xml'
、null
とtrue
in の値を の新しいインスタンスに渡してSimpleXMLElement
いるため、このインスタンスのコンストラクターは、渡した値を使用してインスタンスを初期化し、すぐに使用できるようになります)。