PHP 特征 - 不能使用特征中定义的方法

PHP traits - cannot use method defined in trait

我曾经有几个库 classes 使用完全相同的方法。我想我会更多地了解编码的两个重要方面;特征和 DRY。

我有以下特点:

<?php

namespace App\Berry;

trait Lib
{
    public function getIDs()
    {
        $oClass = new \ReflectionClass(get_called_class());
        $aConstants = $oClass->getConstants();
        foreach($aConstants as $sKey => $mValue)
        {
            if(!is_int($mValue))
            {
                unset($aConstants[$sKey]);
            }
        }
        return array_values($aConstants);
    }
}

以下class:

namespace App\Berry;

use Lib;

class postType
{
    const POST_TYPE_BLOG_ID     =   1;
    const POST_TYPE_BLOG_LABEL  =   __('blog', 'lib');

    const POST_TYPE_PAGE_ID     =   2;
    const POST_TYPE_PAGE_LABEL  =   __('page', 'lib');

    const POST_TYPE_NEWS_ID     =   3;
    const POST_TYPE_NEWS_LABEL  =   __('news', 'lib');
}

我在 PicturesController class:

中这样称呼它
$cPostTypesLibrary = new postType();
$this->set('aPostTypes', $cPostTypesLibrary->getIDs());

现在对我来说,这似乎与 docs 示例 #4(关于使用多个特征)

中告诉我要做的几乎完全一样

我唯一的区别是我的 class 之外有 use,因为 cannot use class because it is not a trait

我在这里错过了什么?

您必须在class

中声明特征
class postType
{
    use Lib;
}

你的 class 没有使用特征,你正在使用 other 使用 use 关键字并尝试导入 Lib class 从同一个命名空间到同一个命名空间。

要正确使用特征,请返回 documentation,查看它们的放置位置。 use 语句位于 class 定义内。在您的情况下,它看起来像这样:

namespace App\Berry;

class postType
{
    use Lib;
    // ...
}