也许我没有得到整个特质系统,所以我想我会问StackOverFlow。
我的第一个特点是...
<?php
trait MY_Stat
{
var $dex;
var $int;
var $str;
}
?>
我不能设法使它与我的类(在另一个文件)无论如何工作...
class MY_Mobile
{
use MY_Stat;
public function __construct($params = NULL)
{
var_dump($this);
}
}
我总是碰壁:
Fatal error: Trait 'MY_Trait' not found in ...\wamp\www\game\application\libraries\MY_Mobile.php
我希望在许多类中都有这个trait,比如手机类、物品类等等......我是否应该把trait的定义和类放在同一个文件中?
顺便说一句,如果你使用codeigniter,你是如何设法让它加载的,你是把你的traits设置到一个帮助文件,库文件...?
4条答案
按热度按时间o4hqfura1#
你可以这样做来解决这个问题:
路径:
application/helpers/your-trait-class.php
内容:
在你的库中,在
!defined('BASEPATH');
行之后手动包含trait类(正如我所说的)。您的媒体库:
并在库方法中使用trait类属性,如下所示:
vcudknz32#
另一个对我有效的替代方法是..其中model_base位于model文件夹中
wxclj1h53#
我从什么地方得到了这个答案,现在我不记得是从哪里得到的了。
在models文件夹中,创建一个名为trait_autoloader. php的文件
现在你已经完成了它打开配置文件夹中的自动加载文件在应用程序文件夹,并把'trait_autoloader'在下面的行,
在应用程序文件夹中,创建一个名为traits的文件夹,并将您的traits放在该文件夹中,注意:我对该文件夹中的所有文件都使用“trait”前缀。在本例中,我使用了一个名为traitFunction.php的简单文件
现在你已经完成了。把下面的行放到你想要的任何模型类中,它们就会很好地工作。
请记住,此功能仅适用于模型。
7kqas0il4#
为了利用
spl_autoload_register
,我不得不对codeigniter index.php文件做了一个小的修改代码点火器索引. php
话虽如此,您必须在codeigniter
application
目录中创建一个traits
文件夹,并在那里创建您的traits。这个怎么用?
在任何控制器中,您只需按如下方式使用它
当
use test_trait
时,将在traits目录中搜索文件test_trait.php
。如果找到该文件,将自动包含