在多个班级中有一个特质

在多个班级中有一个特质

问题描述:

Maybe I'm not getting the whole trait system so I thought I'd ask StackOverFlow.

I made my first trait...

<?php
trait MY_Stat
{   
  var $dex;
  var $int;
  var $str;
}
?>

I can't manage to make it work with my class whatsoever ( in another file ) ....

class MY_Mobile
{
  use MY_Stat;

  public function __construct($params = NULL)
  {     
    var_dump($this);
  }
}

I'm always hitting this wall :

Fatal error: Trait 'MY_Trait' not found in ...\wamp\www\game\application\libraries\MY_Mobile.php

I would like to have this trait in many classes, namely, Mobiles, Items, etc... Am I supposed to have the definition of the trait in the same file as the class ?

On a sidenote, if you're using codeigniter, how did you manage to make it load, are you setting your traits into a helper file, library file... ?

Well you can workout this problem by doing something like this:

Path:

application/helpers/your-trait-class.php

Contents:

<?php
if (!trait_exists('MY_Stat')) {
    trait MY_Stat
    {
        public $dex;
        public $int;
        public $str;
    }
}

In your library just include the trait class (as i said) manually. After the !defined('BASEPATH'); line.

Your Library:

include APPPATH . 'helpers/your-trait-class.php';

class YourLibrary {
    use MY_Stat;

and use trait class properties within your library methods like this:

$this->dex = 0.1;
$this->int = 1;
$this->str = 'Hello';

Another alternative that works for me.. where model_base is in the model folder

@include_once ('model_base.php');  
class device_token extends CI_Model {

        // PHP 5.4 Traits
        use model_base;