gpt4 book ai didi

PHP 命名空间自动加载

转载 作者:行者123 更新时间:2023-12-04 16:54:54 25 4
gpt4 key购买 nike

试图了解命名空间和自动加载如何在 PHP 上工作

Server.php 位于 core/server.php

namespace core\server

{
class Main
{
public function getTopic()
{
$get_params = $_GET;
if (empty($get_params)) $get_params = ['subtopic' => 'test'];
return $get_params;
}
}
}

和 Index.php
spl_autoload_register();

use core\server as subtopic;

$test = new subtopic\Main();

var_dump($test);

它无法加载类核心/服务器/主

最佳答案

自动加载不是这样工作的。
首先,我将解释自动加载器的工作原理。

spl_autoload_register() 是将代码中的函数注册到服务器作为自动加载器的函数,标准函数是:

define('APP_PATH','/path/to/your/dir');

function auto_load($class)
{
if(file_exists(APP_PATH.$class.'.php'))
{
include_once APP_PATH.$class.'.php';
}
}

spl_autoload_register('auto_load');

常量 APP_PATH 将是代码所在目录的路径。
正如您所注意到的,传递给 spl_autoload_register 的参数是我的函数的名称,它注册了该函数,因此当一个类被实例化时,它会运行该函数。

现在使用自动加载器和命名空间的有效方法如下:

文件 - /autoloader.php
define('APP_PATH','/path/to/your/dir');
define('DS', DIRECTORY_SEPARATOR);

function auto_load($class)
{
$class = str_replace('\\', DS, $class);
if(file_exists(APP_PATH.$class.'.php'))
{
include_once APP_PATH.$class.'.php';
}
}

spl_autoload_register('auto_load');

文件 - /index.php
include 'autoloader.php';

$tree = new Libs\Tree();

$apple_tree = new Libs\Tree\AppleTree();

文件 - /Libs/Tree.php
namespace Libs;
class Tree
{
public function __construct()
{
echo 'Builded '.__CLASS__;
}
}

文件 - /Libs/Tree/AppleTree.php
namespace Libs\Tree;
class AppleTree
{
public function __construct()
{
echo 'Builded '.__CLASS__;
}
}

我正在使用命名空间和自动加载以一种很好的方式加载我的函数,您可以使用命名空间来描述您的类所在的目录,并使用自动加载器魔法来加载它而不会出现任何问题。

注意:我使用常量 'DS',因为在 *nix 中它使用 '/' 而在 Windows 中它使用 '\',使用 DIRECTORY_SEPARATOR 我们不必担心代码将在哪里运行,因为它将是“路径兼容"

关于PHP 命名空间自动加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22305151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com