0

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

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

4

3 回答 3

2

使用命名空间

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();
于 2013-03-23T23:03:31.650 回答
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
}
?>
于 2013-03-23T23:22:36.627 回答
0

您可以使用命名空间:PHP 手册

于 2013-03-23T22:53:11.660 回答