Implode doesn’t work on classes
Implode
The PHP function implode is one I use frequently.
When you have an array of strings and want to put them in a string, separated by commas, you can either write a loop like this:
$arr = array('one', 'two', 'three', 'four', 'five');
$str = '';
foreach($arr as $item)
{
$str .= $item . ',';
}
$str = substr($item, 0, strlen($str) - 1);
or you can use the php function implode like this:
$arr = array('one', 'two', 'three', 'four', 'five');
$str = implode(',', $arr);
This is super!
__ToString Magic Method
On the other hand, there is the __ToString magic method for PHP classes. It allows you to give a string output for your class. Take this simple HTML paragraph class as example:
class p {
private $content = null;
public function __construct($content) {
$this->content = $content;
}
// Some more code
public function __ToString() {
return '<p>' . htmlentities($this->content) . '</p>';
}
}
The problem
Now when you want to combine both, it won’t work:
$arr = array();
$arr[0] = new p('test 1');
$arr[0] = new p('test 2');
$str = implode("\n", $arr);
This will give you a “Warning: implode() [function.implode]: Invalid arguments passed.”
No Responses to “Implode doesn’t work on classes”.
Leave a response