????JFIF??x?x????'
Server IP : 79.136.114.73 / Your IP : 3.135.209.242 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/self/root/home/b8009/php-5.6.22/ext/spl/examples/ |
Upload File : |
<?php /** @file class_tree.php * @brief Class Tree example * @ingroup Examples * @author Marcus Boerger * @date 2003 - 2008 * @version 1.1 * * Usage: php class_tree.php \<class\> * * Simply specify the root class or interface to tree with parameter \<class\>. */ if ($argc < 2) { echo <<<EOF Usage: php ${_SERVER['PHP_SELF']} <class> Displays a graphical tree for the given <class>. <class> The class or interface for which to generate the tree graph. EOF; exit(1); } if (!class_exists("RecursiveTreeIterator", false)) require_once("recursivetreeiterator.inc"); /** \brief Collects sub classes for given class or interface */ class SubClasses extends RecursiveArrayIterator { /** @param base base class to collect sub classes for * @param check_interfaces whether we deal with interfaces */ function __construct($base, $check_interfaces = false) { foreach(get_declared_classes() as $cname) { $parent = get_parent_class($cname); if (strcasecmp($parent, $base) == 0) { $this->offsetSet($cname, new SubClasses($cname)); } if ($check_interfaces) { if ($parent) { $parent_imp = class_implements($parent); } foreach(class_implements($cname) as $iname) { if (strcasecmp($iname, $base) == 0) { if (!$parent || !in_array($iname, $parent_imp)) { $this->offsetSet($cname, new SubClasses($cname)); } } } } } if ($check_interfaces) { foreach(get_declared_interfaces() as $cname) { foreach(class_implements($cname) as $iname) { if (strcasecmp($iname, $base) == 0) { $this->offsetSet($cname, new SubClasses($cname, true)); } } } } $this->uksort('strnatcasecmp'); } /** @return key() since that is the name we need */ function current() { $result = parent::key(); $parent = get_parent_class($result); if ($parent) { $interfaces = array_diff(class_implements($result), class_implements($parent)); if ($interfaces) { $implements = array(); foreach($interfaces as $interface) { $implements = array_merge($implements, class_implements($interface)); } $interfaces = array_diff($interfaces, $implements); natcasesort($interfaces); $result .= ' (' . join(', ', $interfaces) . ')'; } } return $result; } } $it = new RecursiveTreeIterator(new SubClasses($argv[1], true)); echo $argv[1]."\n"; foreach($it as $c=>$v) { echo "$v\n"; } ?>