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