• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

自动加载类的另一种方式实现问题

php 搞代码 3年前 (2022-01-25) 12次浏览 已收录 0个评论
文章目录[隐藏]

hello,看了手册上关于自动加载的另一种更快速的方式后,动手试了下,发现挺好用的。不过碰到了个小问题,就是当new class()的那个文件和包含类的文件夹不是属于同级的时候不知道如何自动加载了。
index.php:

<code class="lang-php">namespace inc;spl_autoload_extensions('.class.php');spl_autoload_register();new a();</code>

inc\a.class.php:

<code class="lang-php">namespace inc;class a{    function __construct(){        echo 'a';    }}</code>

上面这样是可以输出a的,但是当把index.php放到比如index\index.php的时候就没法加载类了。请教下这种情况下有没有好的解决办法。
补充下,自己写加载程序可以,但是比较喜欢那老外的方法,2个函数就让php自动完成加载,不需要写额外的代码,好神奇。

回复内容:

hello,看了手册上关于自动加载的另一种更快速的方式后,动手试了下,发现挺好用的。不过碰到了个小问题,就是当new class()的那个文件和包含类的文件夹不是属于同级的时候不知道如何自动加载了。
index.php:

<code class="lang-php">namespace inc;spl_autoload_extensions('.class.php');spl_autoload_register();new a();</code>

inc\a.class.php:

<code class="lang-php">namespace inc;class a{    function __construct(){        echo 'a';    }}</code>

上面这样是可以输出a的,但是当把index.php放到比如index\index.php的时候就没法加载类了。请教下这种情况下有没有好的解决办法。
补充下,自己写加载程序可以,但是比较喜欢那老外的方法,2个函数就让php自动完成加载,不需要写额外的代码,好神奇。

推荐使用Composer进行自动加载, PSR-0规范.

这个加载方式在Zend中早已被内化,例如一个在Vendor/MyClass.php中的类,可以用Vendor_MyClass来调用。
怎么区分文件夹,这是需要自己写程序实现的。如下代码:

<code class="lang-php">function _vendor_autoload($class) {  $parts = explode('\\', $class);  # Support for non-namespaced classes.  $parts[] = str_replace('_', DIRECTORY_SEPARATOR, array_pop($parts));  $path = implode(DIRECTORY_SEPARATOR, $parts);  $file = stream_resolve_include_path($path.'.php');  if($file !== false) {    require $file;  }}spl_autoload<strong>*本文来@源gao@daima#com搞(%代@#码@网2</strong><pre>搞代gaodaima码

_register(‘_vendor_autoload’);


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:自动加载类的另一种方式实现问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址