Maison  >  Article  >  développement back-end  >  关于PHP类继承的问题

关于PHP类继承的问题

WBOY
WBOYoriginal
2016-06-20 12:29:40883parcourir

我现在自己编写了一个两个继承关系的类,父类实例化后子类不知道怎么调用父类已经实例后存储的变量
先把代码粘在下面:

Class Identification{	//Identification函数将name与code联系起来	public function Identification()	{		//连接到InfoModel		$DB_Info = M('Info');		$condition->Name = $this->name;		return $this->code = $DB_Info->where($condition)->getfield('Code');	}	public $name;	protected $code;}Class PT_Info extends Identification{	public function get_BloodTest()	{		$DB_BloodTest = M('Bloodtest');		$condition->Code = $this->code;		echo "This is Code:".$this->code;		$this->Info_BT_WBC = $DB_BloodTest->where($condition)->getfield('WBC');		echo "This is WBC:".$this->Info_BT_WBC;		$this->Info_BT_NEPer = $DB_BloodTest->where($condition)->getfield('NEPer');		echo "This is NE%:".$this->Info_BT_NEPer;		$this->Info_BT_LYPer = $DB_BloodTest->where($condition)->getfield('LY%');		echo "This is LY%:".$this->Info_BT_LYPer;		$this->Info_BT_MOPer = $DB_BloodTest->where($condition)->getfield('MO%');		echo "This is MO%:".$this->Info_BT_MOPer;	}		public $Info_BT_WBC;	public $Info_BT_NEPer;	public $Info_BT_LYPer;	public $Info_BT_MOPer;}public function tclass()	{		$neal = new Identification();		$neal->name = 'Neal';		$code = $neal->Identification();		$this->assign('name',$neal->name);		$this->assign('code',$code);		$neal_BT = new PT_Info();		$neal_BT->get_BloodTest();		$this->assign('Info_BT_WBC',$neal_BT->Info_BT_WBC);		$this->assign('Info_BT_NEPer',$neal_BT->Info_BT_NEPer);		$this->assign('Info_BT_LYPer',$neal_BT->Info_BT_LYPer);		$this->assign('Info_BT_MOPer',$neal_BT->Info_BT_MOPer);		$this->display();	}

如上面代码:我把Identification类实例化为neal后存储了一个变量$code,之后实例化其子类PT_Info为neal_BT,此时需要调用已经存储在neal中的$code变量值(详见PT_Info类里的函数用法)
我不想在PT_Info类里面再单独存一个$code变量,想借用继承关系,毕竟往后还有很多类似的结构,那样写的话整体会很乱
话句话说我先在实例化的子类要调用一个实例化的父类里的变量,这两个类在定义是有继承关系,可是实例化后我不知道怎么告诉编译器这两个类(neal和neal_BT)之间存在继承关系
注:我整个项目使用ThinkPHP框架写的,所以有的函数(比如‘M’方法)并非PHP默认的写法
跪求大神帮忙解答!!!


回复讨论(解决方案)

你的概念出问题了
Class PT_Info extends Identification 后
PT_Info 和 Identification 就是两个独立的类了,虽然 PT_Info 继承了 Identification 一些东西
这就和 你 不是 你父亲 是一个道理

Class Identification
{
    public function Identification()
你在 Identification 定义了 Identification 方法,这就是构造函数了(据说 php7 取消了这个 C++ 来的特征)
那么,你在实例化 PT_Info 时,这个 Identification 方法就会自动被执行 code 属性就已经有值了
注意:构造函数是没有返回值的(写了也没用)

因此 tclass 方法中的 $neal = new Identification(); 是没有意义的
后面还有 $neal_BT = new PT_Info();
就是说 $DB_Info->where($condition)->getfield('Code'); 被执行了两次,多了一次无用功

你的概念出问题了
Class PT_Info extends Identification 后
PT_Info 和 Identification 就是两个独立的类了,虽然 PT_Info 继承了 Identification 一些东西
这就和 你 不是 你父亲 是一个道理

Class Identification
{
    public function Identification()
你在 Identification 定义了 Identification 方法,这就是构造函数了(据说 php7 取消了这个 C++ 来的特征)
那么,你在实例化 PT_Info 时,这个 Identification 方法就会自动被执行 code 属性就已经有值了
注意:构造函数是没有返回值的(写了也没用)

因此 tclass 方法中的 $neal = new Identification(); 是没有意义的
后面还有 $neal_BT = new PT_Info();
就是说 $DB_Info->where($condition)->getfield('Code'); 被执行了两次,多了一次无用功


太感谢啦!!的确是我自己理解上的问题,您这个解释太及时了多谢多谢!!!
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn