PHP 命名空间自动加载必须使用文件夹吗?

2024-03-18

我对在 php 中实现命名空间感到非常困惑,尤其是在别名导入类方面。

我已经按照本教程中的教程进行操作:

  • 利用 PHP V5.3 命名空间实现可读且可维护的代码 http://www.ibm.com/developerworks/opensource/library/os-php-5.3namespaces/(作者:Don Denoncourt;2011 年 3 月 1 日;IBM Developerworks)

但我不明白——什么时候__autoload被使用了,为什么我have to将别名类存储在文件夹中,但是当__autoload is not使用,命名空间中的别名就可以了,如下所示,

<?php
namespace barbarian;
class Conan {
    var $bodyBuild = "extremely muscular";
    var $birthDate = 'before history';
    var $skill = 'fighting';
}
namespace obrien;
class Conan {
    var $bodyBuild = "very skinny";
    var $birthDate = '1963';
    var $skill = 'comedy';
}
use \barbarian\Conan as mother;
$conan = new mother();
var_dump($conan);
var_dump($conan->bodyBuild);

$conan = new \obrien\Conan();
var_dump($conan);
var_dump($conan->birthDate);
?>

虽然这我会收到错误,如果我不存储Conan.php在文件夹中barbarian

<?php
require_once "autoload.php"; 
use \barbarian\Conan as Cimmerian;
$conan = new Cimmerian();
var_dump($conan);
?>

错误消息,

警告:require(barbarian/Conan.php):无法打开流:没有这样的 C:\wamp\www\test\2013\php\namepsace\autoload.php 中的文件或目录 12号线

自动加载.php:

<?php
function __autoload($classname) {
  $classname = ltrim($classname, '\\');
  $filename  = '';
  $namespace = '';
  if ($lastnspos = strripos($classname, '\\')) {
    $namespace = substr($classname, 0, $lastnspos);
    $classname = substr($classname, $lastnspos + 1);
    $filename  = str_replace('\\', '/', $namespace) . '/';
  }
  $filename .= str_replace('_', '/', $classname) . '.php';
  require $filename;
}
?>

Is it a must在文件夹中存储别名类?是否可以导入类而不将它们存储在文件夹中autoload用来?


使用命名空间自动加载类意味着它必须遵循约定,通常该约定涉及使用文件夹(与PSR-0比较 https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md).

如果你有这样的课程有时遵循该约定,那么自动加载器如何知道何时使用文件夹?

所以最终,yes类应根据其名称空间存储在文件夹中。如果您认为文件夹结构没有意义,那么您应该更改命名空间和文件夹结构以反映您真正想要的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 命名空间自动加载必须使用文件夹吗? 的相关文章

随机推荐

  • 如何在地图图钉注释中显示图像?

    我有一个视图 gt gt 子视图 mkmapview in that i want to show image my current image is like this 我想这样展示 我怎样才能做到这一点 我如何在此注释中添加图像 您正在
  • itertool 和 multiprocessing,如何并行生成所有可能的组合

    我有以下代码 它生成产生给定总和 n 的所有可能组合 然而 对于大数字 n 此代码需要很长时间 有没有办法可以跨多个处理器并行化我的代码 from itertools import combinations with replacement
  • 访问 Pundit 策略中的会话参数

    看来 Pundit 策略不访问会话参数 As 构造不将会话识别为有效的变量或方法 有什么方法可以访问会话或其他参数吗 class MyModelPolicy def create contructs Construct where id s
  • 如何在Python上计算文件中的“test”单词数量?

    我有一个由许多字符串组成的文件 好像 sdfsdf sdfsdfsdf sdfsdfsdf 测试 gggg uff 测试测试ffffffff sdgsdgsdgsdg sdgsdgsdgsdg uuuttt 555555555 ddfdfd
  • 为什么指令高速缓存对齐可以提高组相联高速缓存实现的性能?

    我有一个关于指令缓存对齐的问题 我听说 对于微优化 对齐循环使其适合缓存行可以稍微提高性能 我不明白为什么那会有什么作用 我了解缓存命中的概念及其对计算速度的重要性 但似乎在组关联缓存中 相邻的代码块不会映射到同一个缓存组 因此 如果循环跨
  • 使用 Scenform 将 SceneView 加载到片段中后出现黑屏

    我正在开发一个项目 该项目将在一个片段中包含 3D 模型查看器 为了做到这一点 我决定使用 sceneform 在尝试在我的选项卡片段中显示 SceneView 后 我遇到了 SceneView 的问题 一切都是根据示例和 scenefor
  • 如何在 iPhone 应用程序中保持 Web 服务器的登录状态?

    简而言之 我想要一个 iPhone 应用程序 使用输入的用户名和密码值登录到 Web 服务器 然后维护此登录 以便用户可以将数据 POST 到服务器 这只是使用cookie的问题吗 如果是这样 如何执行检查以验证用户是否已登录 Thanks
  • 如何通过 Maven 或 Gradle 在项目中使用“预览 API”和/或“孵化 API”

    作为当前 Java 增强开发过程的一部分OpenJDK https en wikipedia org wiki OpenJDK项目中 一些正在开发的 Java 新功能以预发布形式提供预览API https openjdk java net
  • Python 请求使用证书值而不是路径

    我正在使用 python 请求模块进行 POST 调用 import requests response requests post foo url json foo bar headers foo headers verify path
  • html 中的工具提示

    我有一个 div 需要使用线条和框 将包含一条消息 进行识别 如下面的模型图像所示 2 和 3 线条和矩形框 彼此固定并且可拖动 1 线条 可以向任意方向拉伸 我已经创建了盒子 但我不知道如何在其上附加一条线 这是我尝试过的 JSFIDDL
  • Powershell:多维数组作为函数的返回值

    我在 PowerShell 中的二维数组方面遇到了一些问题 这就是我想做的 我创建了一个应该返回二维数组的函数 调用该函数时 我希望返回值是一个新的二维数组 为了更好地理解 我添加了一个示例函数 如下 function fillArray
  • HTTP 状态 500 - 实例化 servlet 类 org.springframework.web.servlet.DispatcherServlet 时出错

    请不要将此帖子标记为重复帖子 因为我在相关问题中没有找到任何好的资源 使用的技术 Spring MVC 4 3 3 RELEASE 摇篮3 1 雄猫9 0 我创建了一个动态 Web 项目 当我运行它时 出现以下错误 HTTP Status
  • Java线程安全——多个原子操作?

    我只是一个非开发者 想成为一名开发者 所以我的问题可能非常简单 我只是测试 Java 多线程的东西 这不是真正的代码 我想知道如何在 Java 中同时更新两个成员变量 以防我们希望它们同步 举个例子 public class Testing
  • 选择时列名无效

    我有一张桌子叫Jobs具有以下列名称 JobID Name and Value 该表就像只有一个条目一样被填满 JobID 1 Name 测试工作 Value 10 我想要做select from Jobs where Name TestJ
  • Visual Basic 6 ListView 的自动化支持

    I need to get value text of control via automation interface coding with C C I tried with UI Automation API https msdn m
  • 是什么让GDB拒绝崩溃?

    我在这里不知所措 我正在用 C 编写一个编译器 出于爱好 并使用 GDB 7 3 在 amd64 Linux 2 6 32 上使用 GCC 4 6 1 进行编译 除了通常的 I 等之外 标志还有 Wall Wextra O0 g 我有一个函
  • 无法在 Octave 3.8 Ubuntu 中安装 Octave-forge 其他包

    我是 Octave 的新手 尝试安装 杂项 包以使用 GNU 单元 安装失败 我试过 apt get 安装八度杂项 deb 软件包已安装 但未在 Octave 3 8 中列出 通过 gt gt pkg list 然后我尝试 gt pkg i
  • Derby DB SQL,从行号开始选择行

    如何在 Derby DB 的 SQL 查询中从 X 行到 Y 行进行选择 例如 我想选择第 15 30 行 但不是前 15 行 选择从行号 30 开始的所有行 我尝试了 LIMIT 和 ROWNUM 但它们不起作用 我怎样才能在德比做到这一
  • php中如何检测ajax跨域请求

    对于普通的ajax请求我使用 strtolower SERVER HTTP X REQUESTED WITH xmlhttprequest 但这不适用于跨域请求 我能怎么做 Edit2 如果您以这种方式使用 jQuery ajax 函数 v
  • PHP 命名空间自动加载必须使用文件夹吗?

    我对在 php 中实现命名空间感到非常困惑 尤其是在别名导入类方面 我已经按照本教程中的教程进行操作 利用 PHP V5 3 命名空间实现可读且可维护的代码 http www ibm com developerworks opensourc