I’m trying to do something like this:
function get_value($value) { if (is_null($value)) { if ($value expects array) { return ['hello', 'world']; } else { return 'hello world'; } } return $value; }
So that I can call it in an echo or a foreach like this:
$value = null; foreach(get_value($value) as $value) { echo $value; } echo get_value($value);
So the foreach would expect an array, but the echo would expect a string.
Is this possible?
Advertisement
Answer
It is not possible to use functions like that.
However, if you go a bit further and start using objects then you can actually achieve that by creating a class that implements the IteratorAggregate interface together with defining the __toString()
magic method.
class GetValue implements IteratorAggregate { private $value; public function __construct($value = null) { $this->value = $value === null ? ['hello', 'world'] : (array) $value; } public function getIterator() { return new ArrayIterator($this->value); } public function __toString() { return implode(' ', $this->value); } } $valueIterator = new GetValue(); echo $valueIterator; foreach ($valueIterator as $key => $value) { echo "n" . $key . ' => ' . $value; }