2011-10-18 15 views
1

私は最近、より優れた/より記述的なオブジェクトを使用することで、現在のプロジェクトでのアプローチが大幅に改善されることを認識しました。このように、私は、オブジェクトの配列を別のクラスのメンバーにしたいと思いました。PHP内のクラス内のオブジェクトの配列

編集:私の質問が何であるかはっきりしていませんでした。私の質問はこうです:クラスLogFileに、Match型のオブジェクトを含む配列を持つにはどうすればいいですか?

class LogFile 
{ 
    public $formattedMatches; 
    public $pathToLog; 
    public $matchCount; 
    ** An array called matches that is an array of objects of type Match ** 
} 

class Match 
{ 
    public $owner; 
    public $fileLocation; 
    public $matchType; 
} 

は、最終的には私のような何かを行うことができるようにしたい:

$logFile = new LogFile(); 
$match = new Match(); 
$logFile->matches[$i]->owner = “Brian”; 

をどのように私は私が説明した何をすればいいですか?つまり、種類Matchのオブジェクトを含む配列を作成するには、クラスLogFileで何を行う必要がありますか?

+0

私はどのように記述しましたか?つまり、Match型のオブジェクトを含む配列を作成するには、LogFileクラスで何を行う必要がありますか? –

+0

個々の回答すべてにコメントするのではなく、皆さんのおかげで助けてくれたことに感謝したいと思います。私はそれが今どのように見えますか。強力な書式設定規則の欠如は私をまだ捨ててしまいます。 –

答えて

1

ええ、それはうまくいくでしょう。

class LogFile 
{ 
    public $formattedMatches; 
    public $pathToLog; 
    public $matchCount; 
    public $matches = array(); 
} 

class Match 
{ 
    public $owner; 
    public $fileLocation; 
    public $matchType; 
} 

$l = new LogFile(); 
$l->matches[0] = new Match(); 
1

一致する別のパブリック変数を作成するだけです。その後、constructor methodの配列として初期化することができます。

class LogFile 
{ 
    public $formattedMatches; 
    public $pathToLog; 
    public $matchCount; 
    public $matches; 

    function __construct() { 
     $matches=array(); 
     //Load $matches with whatever here 
    } 
} 
1
class LogFile 
{ 
    public $formattedMatches; 
    public $pathToLog; 
    public $matchCount; 
    public $matches = array(); 
} 

PHPは強く型付けされていません - あなたは任意の変数に好き置くことができます。試合に追加するには、$logFile->matches[] = new Match();を実行してください。

0

アレイに追加したい場合はちょうどその

public $matches = array(); 

を含める:

$matches[] = $match; // $match being object of type match 
0

これは、オブジェクトを格納するために意図されているあなたはSplObjectStorageのオブジェクトを使用することができます。

4

これは、answer by Bradまたはby swatkinsに追加されています。

Match型のオブジェクトを含む配列を作成するには、どうすればよいですか?

Matchオブジェクトのみを含むことができる「配列」を作成できます。 、あなたはそれを設定するコンストラクタで

:あなたは、あなたクラスLogFile使用することをMatchesクラスを作る

class Matches extends ArrayObject 
{ 
    public function offsetSet($name, $value) 
    { 
     if (!is_object($value) || !($value instanceof Match)) 
     { 
      throw new InvalidArgumentException(sprintf('Only objects of Match allowed.')); 
     } 
     parent::offsetSet($name, $value); 
    } 
} 

:これはArrayObjectから延びると、特定のクラスのオブジェクトを受け入れることによって非常に簡単です新しいMatches「配列」。使用法:

$l = new LogFile(); 
$l->matches[] = new Match(); // works fine 

try 
{ 
    $l->matches[] = 'test'; // throws exception as that is a string not a Match 
} catch(Exception $e) { 
    echo 'There was an error: ', $e->getMessage(); 

} 

Demo - これは役に立ちます。

関連する問題