Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP对象属性重写_Php_Object - Fatal编程技术网

PHP对象属性重写

PHP对象属性重写,php,object,Php,Object,我正在解决我第一次面临的非常奇怪的问题。 我有一些带有static属性的主类::$someProperty,我用这个类扩展了其他类,例如ClassA和ClassB。 问题是现在,当我加载 $classA = ClassA 就在那里 static::$someProperty = "ClassA" 并回显这个值,它工作正常并返回ClassA,但我也会加载 $classB = ClassB 设定 static::$someProperty = "ClassB" 当我 echo static:

我正在解决我第一次面临的非常奇怪的问题。 我有一些带有static属性的主类::$someProperty,我用这个类扩展了其他类,例如ClassA和ClassB。 问题是现在,当我加载

$classA = ClassA
就在那里

static::$someProperty = "ClassA"
并回显这个值,它工作正常并返回ClassA,但我也会加载

$classB = ClassB
设定

static::$someProperty = "ClassB"
当我

echo static::$someProperty
现在在$classA中,有值ClassB

你知道怎么解决这个问题吗?可能它与静态有关,但我现在不知道该怎么办

    class Translateable extends Model{

        public static $transLang;
        public static $transClassInstance;
        public static $instance;

        public $transInstance = null;

        public function __construct(array $attributes = array()) {
            self::$transLang = App::getLocale();

            $tcName = static::$instance->transClass;
            static::$transClassInstance = new $tcName;
            parent::__construct($attributes);
        }

    /**
     * add trans to the item
     *
     * @return mixed
     */
    public static function withTrans($lang = null) {

        if($lang == null) {
            $lang = static::$transLang;
        }

        return static::join(static::$transClassInstance->getTable(), function ($join) use ($lang) {
            $join->on(static::$instance->getTable() . '.' . static::$instance->primaryKey, '=', static::$transClassInstance->getTable() . '.' . static::$instance->primaryKey)->where(static::$transClassInstance->getTable() . '.lang', '=', $lang);
        })->where(static::$transClassInstance->getTable() . '.lang', '=', $lang)
            ;

    }
    }




    class Nested extends Translateable{

        //    protected $lft, $lvl, $rgt, $parent_ID;

        public static $transClassInstance;
        public static $transLang;


        public function __construct(array $attributes = array()) {

            self::$transLang = App::getLocale();

            $tcName = static::$instance->transClass;
            static::$transClassInstance = new $tcName;

            parent::$instance = $this;
            parent::__construct($attributes);

        }
    /**
     *
     * get $this item child
     *
     * @return null
     */
    public function getChilds() {

        $primaryKeyName = $this->primaryKey;
        $parent_id = $this->$primaryKeyName;
        // here is echo PageTrans instead of ProductCategoryTrans
        echo static::$transClassInstance->getTable().'<br/>';
        echo static::$transClassInstance->getTable() . '.lang'.'<br/>';
        $query = static::where('parent_ID', '=', $parent_id)->where(static::$transClassInstance->getTable() . '.lang', '=', static::$transLang);
        echo $query->toSql();
        $this->generateItemsQuery($query);
        $query->orderBy('lft', 'ASC');
        $categories = $query->get();

        return $categories;

    }


    }


class ProductCategory extends Nested{
    public $transClass = 'App\Models\ProductCategoryTrans';

    public function __construct(array $attributes = array()) {

        static::$instance = $this;
        parent::__construct($attributes);

    }
}

class Page extends Nested{
    public $transClass = 'App\Models\PageTrans';

    public function __construct(array $attributes = array()) {

        static::$instance = $this;
        parent::__construct($attributes);

    }
}
试着在A类和B类中使用self

self::$someProperty = 'test';

显示一些扩展主类并在每个子类中设置静态属性的代码。我试图改进内联代码的格式。使用ctl-k将其格式化为代码块,我建议将其扩展为完整的PHP语句?ClassA是ClassA类的对象吗?如果您显示ClassA和ClassB的定义,这将很有帮助。当我使用它时,我需要解决另一个问题->第一个对象new ProductCategory的$transClassInstance变量存储实例中的它
self::$someProperty = 'test';