【问题标题】:using namespace with array_map()使用带有 array_map() 的命名空间
【发布时间】:2014-06-26 01:27:58
【问题描述】:

在一个 PHP Web 项目中,classes 文件夹中有两个子文件夹,如下所示:

项目\类\应用程序

项目\类\实用程序

实用程序子文件夹中有一个名为 Cleanse 的类。这是该类中部分代码的副本:

namespace classes\utility;

class Cleanse
{
    # ATTRIBUTES
    protected static $_ns = __NAMESPACE__;   

    # METHODS
    public static function escape($values)
    {
        return is_array($values) ?
                    array_map(self::$_ns.'\Cleanse::escape', $values) :
                    htmlentities($values, ENT_QUOTES, 'UTF-8');
    }           
}

我想知道是否应该将 $_ns 声明为静态。有没有更好的方法来声明这个属性,如果有,如何从这个类的函数中调用它?

【问题讨论】:

  • 为什么需要 _ns 属性?直接使用__NAMESPACE__ 常量。

标签: php oop namespaces array-map


【解决方案1】:

也许我在这里遗漏了一些东西,但是为什么要将 php 魔术静态 NAMESPACE 的值放入自己的变量中?为什么不直接使用 NAMESPACE

否则,您可以使用私有,因此只有此类可以访问该变量并将其用作 $this->_ns,但实际上,我只会使用 NAMESPACE 变量本身。

如果您决定静态声明它,请使用 self::_ns。

【讨论】:

    【解决方案2】:

    这是一个简单的解决方案,只需使用array_map([static::class, 'escape'], $values) 而不是__NAMESPACE__

    class Cleanse
    { 
        public static function escape($values)
        {
            return is_array($values) ?
                        array_map([static::class, 'escape'], $values) :
                        htmlentities($values, ENT_QUOTES, 'UTF-8');
        }           
    }
    

    【讨论】:

    • 这种方法有名称吗?不幸的是,由于运行的是旧版本的 PHP (5.4.4),它对我不起作用。但是,一旦升级,我会尝试一下。与此同时,将static::class 替换为get_called_class() 是可行的。
    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多