Not that I know of, but you can build your own to use. Not tested, but here are some examples to test your chain:
Using an array of methods:
Code: Select all
is_chainable($obj, array('getObject1', 'getObject2', 'getObject3', 'getId'));
function is_chainable($obj, $methods)
{
foreach($methods as $method) {
if(!method_exists($obj, $method)) {
return false;
}
}
return true;
}
Using PHP syntax (might be easier as you can copy/paste stuff):
Code: Select all
is_chainable($obj, 'getObject1()->getObject2()->getObject3()->getId()');
function is_chainable($obj, $chain)
{
$names = explode('->', $chain);
foreach($names as $name) {
$method = preg_replace('/\(.*/', '', $name);
if(!method_exists($obj, $method)) {
return false;
}
}
return true;
}
I'm not sure, but if you pass the object in by reference, then you may be able to actually execute the chain and return it. I didn't give this much thought, just an idea:
Code: Select all
$id = call_user_chain($obj, 'getObject1()->getObject2()->getObject3()->getId()');
function call_user_chain(&$obj, $chain)
{
$names = explode('->', $chain);
foreach($names as $name) {
$method = preg_replace('/\(.*/', '', $name);
if(!method_exists($obj, $method)) {
return false;
}
}
return eval('$obj->' . $chain);
}