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;
// ...
}
我曾经有几个库 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;
// ...
}