Если вы хотите объединить строковое представление группы объектов в одну строку, вы можете использовать implode для массива этих объектов. Классы объектов просто должны иметь магический метод __toString()
.
class myClass {
protected $name;
protected $value;
public function __construct($name,$value) {
$this->name = $name;
$this->value = $value;
}
public function __toString() {
return $this->name . '/' . $this->value;
}
}
$obj1 = new myClass('one',1);
$obj2 = new myClass('two',2);
$obj_array = array($obj1, $obj2);
$string_of_all_objects = implode('|',$obj_array);
echo $string_of_all_objects; // 'one/1|two/2'
Я нашел этот трюк полезным для быстрого получения строкового представления группы объектов для отображения на веб-странице. Нет необходимости перебирать массив объектов с помощью foreach
и использованием echo $obj->get('name')
.
РЕДАКТИРОВАТЬ: А вот и пример с классом "коллекции". У меня есть 2 выхода (эхо) в конце. Второй должен работать, но я не уверен насчет первого.
class myCollectionClass implements IteratorAggregate {
protected $objects = array();
public function __construct() {};
public function add(myClass $object) {
$this->objects[] = $object;
return $this; // fluid
}
public function getIterator() { // for the interface
return new ArrayIterator($this->objects);
}
public function __toString() {
return implode($this->objects);
}
}
$my_collection = new myCollectionClass();
$my_collection->add($obj1)->add($obj2); // add both myClass objects to the collection. can do in one line because fluid
//echo implode('|',$my_collection); // Comment out myCollectionClass's __toString method to test this. does it work? I'm not sure. But the next line will work thanks to myCollectionClass' __toString, which itself uses myClass's __toString
echo $my_collection; // same output as previous block before EDIT.