PHP特征 - 不能使用特征

时间:2016-10-12 18:56:30

标签: php oop cakephp-3.0 dry traits

我曾经有几个库类与完全相同的方法。我想更多地了解编码的两个重要方面;特质和干燥。

我有以下特点:

<?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);
    }
}

以下课程:

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课程中这样称呼它:

$cPostTypesLibrary = new postType();
$this->set('aPostTypes', $cPostTypesLibrary->getIDs());

现在对我来说,这看起来几乎就像告诉我在docs示例#4中所做的那样(关于使用多个特征)

我唯一的区别是,由于获得了cannot use class because it is not a trait

,我的班级之外的use

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

你必须在类

中声明内部
class postType
{
    use Lib;
}

答案 1 :(得分:2)

您的类没有使用该特征,而是使用use Lib关键字并尝试将use类从同一名称空间导入到,相同的命名空间。

要正确使用特征,请返回other,并查看它们的放置位置。 namespace App\Berry; class postType { use Lib; // ... } 语句放在类定义中。在你的情况下,它看起来像这样:

var Diagram = require('./diagram');
router.post('/saveNewDiagram',function(req,res){
   Diagram.save(req.body);
});