7

別の構成ファイルで変数を定義しました。

define('URL', 'someurl.co.uk');

ただし、クラス内の文字列と連結するために使用しようとすると:

class AdminEmail extends Email {

   private $from = "jsmith".URL;

次のエラーが表示されます。

Parse error: parse error, expecting `','' or `';'' 

しかし、エコーアウトすると、完全に表示されます!

ここで明らかなことを何も見逃していないことを願っています!

4

2 に答える 2

17

クラス変数を事前定義する場合、定数、関数、またはその他の変数を使用することはできません。クラス定義は設計図のようなもので、スクリプト内で行われている他のことから完全に独立している必要があります (もちろん、他のクラスへの依存関係は除きます)。

コンストラクターなどで、後でこれを設定する必要があります。

class AdminEmail extends Email {

   private $from;

   function __construct()
   {
     $this->from = "jsmith".URL;
   }

または別の関数で:

   function setFrom($from)
    {
     $this->from = $from;
    }
于 2010-07-20T09:15:08.090 に答える
1

クラス変数を事前定義する場合、定数は使用できますが、関数やその他の変数は使用できません。.また、ドット文字列連結演算子などの演算子も使用できません。

詳細については、PHP OO マニュアルを参照してください。array()クラス変数を事前定義するときにこの構造を使用できることに注意してください。array()関数ではなく、言語構造です。

この場合、ソリューションとして 2 つのパスから選択できます。コンストラクターで値を定義できます。

class AdminEmail extends Email {

  private $from;

  function __construct()
  {
     $this->from = "jsmith".URL;
  }

もう 1 つの解決策は、常に関数を使用して値を取得することです。

class AdminEmail extends Email {

  private $from;

  function getFrom()
  {
     if (null === $this->from) {
         $this->from = "jsmith" . URL;
     }
     return $this->from;
  }
于 2010-07-20T09:33:07.503 に答える