我最近意识到我对项目的当前方法将通过使用更好/更具描述性的对象而大大改进。因此,我意识到我希望一个对象数组成为另一个类的成员。
编辑:我不清楚我的问题是什么。我的问题是:我如何在类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”;
我如何做我描述的内容?换句话说,我需要在类LogFile
中创建一个包含Match
类型对象的数组?
答案 0 :(得分:4)
这是对answer by Brad或by swatkins的补充。你写道:
我在LogFile类中需要做什么来创建一个包含Match类型对象的数组?
您可以创建一个只能包含Match
个对象的“数组”。通过从ArrayObject
扩展并仅接受特定类的对象,这相当容易:
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);
}
}
然后,您使用LogFile
类{<1}}使您成为Matches
课程。
class LogFile
{
public $formattedMatches;
public $pathToLog;
public $matchCount;
public $matches;
public function __construct()
{
$this->matches = new Matches();
}
}
在你设置它的构造函数中,新的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 - 希望这有用。
答案 1 :(得分:1)
只需为匹配创建另一个公共变量。然后,您可以将其初始化为constructor method中的数组。
class LogFile
{
public $formattedMatches;
public $pathToLog;
public $matchCount;
public $matches;
function __construct() {
$matches=array();
//Load $matches with whatever here
}
}
答案 2 :(得分:1)
class LogFile
{
public $formattedMatches;
public $pathToLog;
public $matchCount;
public $matches = array();
}
PHP没有强类型 - 您可以在任何变量中添加任何您喜欢的内容。要添加到匹配项,只需执行$logFile->matches[] = new Match();
。
答案 3 :(得分: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();
答案 4 :(得分:0)
请加入
public $matches = array();
然后当你想要添加到数组时:
$matches[] = $match; // $match being object of type match
答案 5 :(得分:0)
您可以使用SplObjectStorage
的对象,因为它旨在存储对象。