Skip to content

Instantly share code, notes, and snippets.

@calebporzio
Last active July 23, 2023 04:27
Show Gist options
  • Save calebporzio/ed3a1edcf0dad1c57909a7c5c01359f2 to your computer and use it in GitHub Desktop.
Save calebporzio/ed3a1edcf0dad1c57909a7c5c01359f2 to your computer and use it in GitHub Desktop.
Handy "chain()" helper method for making non-fluent classes/objects fluent.
<?php
function chain($object)
{
return new class ($object) {
protected $lastReturn = null;
public function __construct($object)
{
$this->wrapped = $object;
}
public function __toString()
{
return (string) $this->lastReturn;
}
public function __call($method, $params)
{
if (($index = array_search('{carry}', $params)) !== false) {
$params[$index] = $this->lastReturn;
}
$this->lastReturn = $this->wrapped->{$method}(...$params);
return $this;
}
};
}
@guilhermeportela
Copy link

It will always throw a BadMethodCallException, won't it?

@guilhermeportela
Copy link

It will always throw a BadMethodCallException, won't it?

Probably a guard with method_exists() would be sufficient.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment