具有函数的Php名称空间

时间:2015-01-02 18:20:54

标签: php namespaces

我有一个目录include。在这个目录中,我只有一个目录:HQF。在这个目录中,我有很多文件,我总是声明它们属于HQF命名空间,如下所示:

<?php
namespace HQF;
class MyClass
{
}

该文件名为“MyClass.php”。我试图“稍微”一点PSR0

一切正常,我已经制作了这样的自动加载器:

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('\\', DS, $namespace).DS;
    }
    $fileName .= str_replace('_', DS, $className).'.php';
    $fileName = 'include/'.$fileName;
    require $fileName;
}

因此,当我需要一个课程时,我必须这样做:$m = new \HQF\MyClass();它就像一个魅力,自动包括文件“include/HQF/MyClass.php

我遇到“纯粹”功能的问题。

我创建了一个名为“include/HQF/mb_utils.php”的文件,我想放置mb_xxx函数。注意:没有类,只有函数

我尝试了以下所有事情但没有成功:

  • $test=\HQF\mb_ucname('calling HQF/mb_ucname...');
  • $test=\mb_ucname('calling HQF/mb_ucname...');
  • use \HQF\mb_utils;然后是上面的两个测试;

它们都不起作用。我错过了什么?

1 个答案:

答案 0 :(得分:1)

我依赖Mark Ba​​ker的评论。

所以这是我的解决方法:我已经创建了一个名为Mb.php的文件,其中包含一个名为&#34; Mb&#34;的类。 (对于&#39;多字节&#39;)我已经把我的所有mutibytes功能都放在这样:

<?php
namespace HQF;

class Mb
{
    static public function ucfirst(&$string, $e ='utf-8')
    {
        /* blabla */
    }
    static public function ucname($string, $e ='utf-8')
    {
        /* blabla */
    }
}

然后我称他们为:

$mystring_to_change = \HQF\Mb::ucname($original_name);

这是我找到的唯一方式,我不知道它是否是最好的......任何建议都欢迎。