如果有两个具有相同名称的类,php类如何确定要扩展哪个类?

时间:2013-03-23 22:43:19

标签: php class extend

鉴于我有两个User类,一个位于/model/User.php,另一个位于/assets/User.php

现在我想要一个从/model/User.php扩展User类的类,但似乎php总是在寻找/assets/User.php中的那个。知道php如何确定从哪个类扩展?

3 个答案:

答案 0 :(得分:2)

使用namespaces

user.php

class User {
    function someMethod(){}
}

myUser.php

namespace My;

class User {
    function someMethod(){}
}

你可以像这样使用它:

include 'user.php';
include 'myuser.php';

$user1 = new User();
$user2 = new \My\User();

答案 1 :(得分:0)

您可以使用名称空间:PHP Manual

答案 2 :(得分:0)

您应该(如果使用)设置适当的spl_autoload_register函数(http://php.net/manual/en/function.spl-autoload-register.php)以便能够自动加载具有相同名称的文件中的对象,芽对象的名称不能相同。

您可以通过名称和存储文件的路径来区分对象。

例如,您需要在bootstrap.php中使用核心类并定义自动加载功能:

    <?php // bootstrap.php

require_once Core.php;
spl_autoload_register(array('Core', 'auto_load'));

$myUserClass = new MyClasses_User() // the required files for the class are loaded because of auto_load, PHP determines the right classes due to naming conventions: DirName_ClassName 

?>


<?php // Core.php

define('DIR_SEPARATOR', '/');

class Core {

  // Autoloading
    public static function auto_load($class, $dir_classes = 'classes')
    {
    $file = str_replace('_', DIR_SEPARATOR, $class); // replace _ by / for path to file

        if ($path = find_file_based_on_class_name($dir_classes, $file))
        {
            // Load the class file
            require $path;
        }
    }

?>

<?php
// classes/Model/User.php
class Model_User {
 // define the class
}
?>

// classes/Assets/User.php
<?php
class Assets_User {
 // define the class
}
?>

// classes/MyClasses/User.php
<?php
class MyClasses_User exdends Model_User {
 // define the class
}
?>
相关问题