note 108273 added to function.get-parent-class

From: Date: Fri, 13 Apr 2012 10:27:14 +0000
Subject: note 108273 added to function.get-parent-class
Groups: php.notes 
Request: Send a blank email to php-notes+get-187102@lists.php.net to get a copy of this message
You can use this function to find common parent of multiple objects or classes. <?php /** * Returns name of the first (in class hierarchy) common parent class of all provided objects or classes. * Returns FALSE when common class is not found. * * @param mixed $objects Array that can contain objects or class names. * @return mixed */ function get_first_common_parent($objects) { $common_ancestors = null; foreach($objects as $object) { if (is_object($object)) { $class_name = get_class($object); } else { $class_name = $object; } $parent_class_names = array(); $parent_class_name = $class_name; do { $parent_class_names[] = $parent_class_name; } while($parent_class_name = get_parent_class($parent_class_name)); if ($common_ancestors === null) { $common_ancestors = $parent_class_names; } else { $common_ancestors = array_intersect($common_ancestors, $parent_class_names); } } return reset($common_ancestors); } ?> Example: <?php class A { } class B extends A { } class D extends B { } class E extends B { } class C extends A { } class F extends C { } class G extends F { } class H { } //returns "A" get_first_common_parent(array('G', 'E')); //returns "F" get_first_common_parent(array(new G(), 'F')); //returns false (no common parent) get_first_common_parent(array('C', 'H')); //returns false (non-existent class provided) get_first_common_parent(array(new B(), 'X')); ?> ---- Server IP: 116.126.142.157 Probable Submitter: 150.254.4.170 ---- Manual Page -- http://www.php.net/manual/en/function.get-parent-class.php Edit -- https://master.php.net/note/edit/108273 Del: integrated -- https://master.php.net/note/delete/108273/integrated Del: useless -- https://master.php.net/note/delete/108273/useless Del: bad code -- https://master.php.net/note/delete/108273/bad+code Del: spam -- https://master.php.net/note/delete/108273/spam Del: non-english -- https://master.php.net/note/delete/108273/non-english Del: in docs -- https://master.php.net/note/delete/108273/in+docs Del: other reasons-- https://master.php.net/note/delete/108273 Reject -- https://master.php.net/note/reject/108273 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#187102) next »