首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类加载的PSR-0实现

类加载的PSR-0实现
EN

Stack Overflow用户
提问于 2014-06-16 07:18:32
回答 2查看 382关注 0票数 2

我对PHP并不陌生,但我对PSR并不陌生。我读过其中的一些,我想尝试在编码方面遵循这个标准,但我有点困惑如何实现它。因此,我需要一个简单的建议,从你们如何实现的基础上,我将提供的例子。

目录结构

代码语言:javascript
复制
 /models
    User.php
 /controller
    controller.php
 /view
    index.php

Model.php

代码语言:javascript
复制
Class User
{
  public function foo()
  {
    // Do something
  }
}

我如何用PSR-0方法在我的controller.php上调用这个类?我读过这样的书

代码语言:javascript
复制
namespace, use

还有这个

代码语言:javascript
复制
   function autoload($className)
   {
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
   }

但我不知道该怎么把这些密码放哪儿。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-16 07:26:53

这意味着您为所使用的每个名称空间都有一个文件夹。

因此,如果您在名称空间中定义了一个类,请说:

代码语言:javascript
复制
<?php
namespace Nicemodels;

class Niceuser { ... }

然后文件Niceuser.php需要在./model/Nicemodels/

您仍然需要确保正确处理模型目录。您可以在更高的级别启动一个模型,并将所有模型放在模型命名空间中(推荐)。

因此,上面的例子如下:

代码语言:javascript
复制
<?php
namespace Models\Nicemodels;

class Niceuser { ... }

use语句用于从另一个命名空间导入类:

代码语言:javascript
复制
<?php
namespace Models\Nicemodels;

use Models\Normaluser

class Niceuser extends Normaluser { ... }

自动加载器将此命名空间映射到行中的目录行为。

代码语言:javascript
复制
$fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;

在这里,您可以将命名空间分隔符“\”转换为目录分隔符。

你需要告诉你的自言自语这一切的起点。因此,如果不使用模型名称空间,则需要将模型/文件夹作为开始。你需要确保你开始你的文件名的情况。否则,自动加载器将找不到您的类。

如果要在控制器中使用此类,请执行以下操作:

代码语言:javascript
复制
$user = new \Models\Nicemodels\Niceuser();

如果您导入类,您可以缩短它:

代码语言:javascript
复制
use Models\Nicemodels\Niceuser;
...
$user = new Niceuser();
票数 1
EN

Stack Overflow用户

发布于 2014-06-16 07:38:57

您需要使用spl_autoload_register()函数注册自动加载程序。

在docs中有一些很好的例子:http://www.php.net/manual/en/function.spl-autoload-register.php

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24238408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档