namespaces - PHP class_exists - getting Fatal error: Cannot redeclare clas instead? -



namespaces - PHP class_exists - getting Fatal error: Cannot redeclare clas instead? -

i want homecoming an error message when two classes provided user/ developer don't exist.

core/model/conan.php,

namespace core\model; class conan { var $bodybuild = 'extremely muscular'; var $birthdate = 'before history'; var $skill = 'fighting'; public function methodconan() { homecoming 'the methodconan namespace core\model'; } }

local/model/conan.php,

namespace local\model;

class conan { var $bodybuild = 'very skinny'; var $birthdate = '1963'; var $skill = 'comedy'; public function methodconan() { homecoming 'the methodconan namespace local\model'; } }

index.php,

define ('website_docroot', str_replace('\\', '/', dirname(__file__)).'/'); include 'core/helper/baseclassautoloader.php'; // autoload core & local classes. $autoloader = new baseclassautoloader([ 'local/model/', 'core/model/' ]); if (class_exists('\foo\model\conan')) { echo 'from local'; } else { if(class_exists('\boo\model\conan')) { echo 'from core'; } else { echo 'both don\'t exist'; } }

i suppose 'both don\'t exist' result, error instead,

fatal error: cannot redeclare class local\model\conan in c:\wamp\www...\local\model\conan.php on line 8

it doesn't create sense!

is wrong autoload below??

autoload class,

class baseclassautoloader { public function __construct($directory) { $this->directory = $directory; spl_autoload_register(array($this,'getclass')); } private function getclass($class_name) { if(is_array($this->directory)): $maindirectories = $this->directory; else: $maindirectories = array($this->directory); endif; $subdirectories = []; $namespace = "\\"; $isnamespace = false; $parts = explode($namespace, $class_name); if(strpos($class_name, $namespace) !== false) { $isnamespace = true; } $filenamename = end($parts).'.php'; foreach($maindirectories $pathdirectory) { $iterator = new recursiveiteratoriterator ( new recursivedirectoryiterator(website_docroot.$pathdirectory), // must utilize absolute path files when ajax used. recursiveiteratoriterator::self_first ); foreach ($iterator $fileobject) { if ($fileobject->isdir()) { $pathnamereplace = str_replace('\\', '/', $fileobject->getpathname()); $array = explode("/",$pathnamereplace); $folder = end($array); if($folder === '.' || $folder === '..') {continue;} $subdirectories[] = preg_replace('~.*?(?=core|local)~i', '', str_replace('\\', '/', $fileobject->getpathname())) .'/'; } } } $merged_directories = array_merge($maindirectories,$subdirectories); foreach($merged_directories $pathdirectory) { if(file_exists(website_docroot.$pathdirectory.$filenamename)) { include website_docroot.$pathdirectory.$filenamename; if($isnamespace === false) if (class_exists($class_name)) break; } } } }

try using require_once instead of include

php namespaces spl spl-autoload-register

Comments

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -