鉴于我有两个 User 类,一个位于 /model/User.php 另一个位于 /assets/User.php
现在我想要一个从/model/User.php 扩展User 类的类,但似乎php 总是在寻找位于/assets/User.php 中的那个。知道 php 如何确定从哪个类扩展?
使用命名空间
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();
你应该(如果你使用)适当地设置你的 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
}
?>
您可以使用命名空间:PHP 手册