PHPクラスの継承に関する質問

WBOY
リリース: 2016-06-20 12:29:40
オリジナル
887 人が閲覧しました

2 つの継承関係を持つクラスを作成しました。親クラスがインスタンス化された後、子クラスは、親クラスがインスタンス化された後に保存された変数を呼び出す方法を知りません。
まず、以下のコードを貼り付けます。

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 としてインスタンス化します。このとき、$code 変数を呼び出す必要があります。 neal に格納されている値 (詳細は PT_Info クラスの関数の使用法を参照)
PT_Info クラスに別の $code 変数を格納したくないのですが、結局のところ、継承関係を借用したいのです。このように書くと、今後も同様の構造がたくさん出てくるでしょう。
つまり、最初にインスタンス化されたサブクラスでインスタンス化された親クラスの変数を呼び出す必要があります。定義上継承関係がありますが、インスタンス化後、これら 2 つのクラスについてコンパイラーに伝える方法がわかりません (neal と neal_BT の間には継承関係があります)
注: 私のプロジェクト全体は ThinkPHP フレームワークを使用して書かれています, そのため、一部の関数 (「M」メソッドなど) は PHP のデフォルトの方法で記述されていません
助けてください! ! !


ディスカッション (解決策) への返信

概念に何か問題があります
クラス PT_Info が Identification を拡張した後
PT_Info と Identification は 2 つの独立したクラスですが、PT_Info は Identification からいくつかのものを継承します
これは、あなたがあなたの父親ではないのと同じです

Class Identification
{
public function Identification()
Identification でコンストラクターである Identification メソッドを定義しました (php7 がこの機能を C++ からキャンセルしたと言われています)
次に、 PT_Info をインスタンス化すると、この Identification メソッドが自動的に実行され、コード属性にはすでに値が設定されています
注: コンストラクターには戻り値がありません (記述しても無駄です)

したがって、tclass メソッド $neal = new Identification(); は意味がありません
に続く $neal_BT = new PT_Info();
は $DB_Info->where($condition)->getfield('Code') を 2 回実行します。さらに無駄な努力

あなたの概念に何か問題があります
クラス PT_Info は Identification を拡張します
PT_Info と Identification は 2 つの独立したクラスですが、PT_Info は Identification からいくつかのものを継承しています
これはあなたがあなたの父親ではないのと同じです

Class Identification
{
public function Identification()
Identification で Identification メソッドを定義しました。これがコンストラクタです (php7 にはあると言われています)この機能は C++ からキャンセルされました)
その後、PT_Info をインスタンス化すると、Identification メソッドが自動的に実行され、コード属性にはすでに値が設定されています
注: コンストラクターは戻り値がありません (戻り値はありません)。書いてください)

したがって、tclass メソッドの $neal = new Identification(); は意味がありません
$neal_BT = new PT_Info(); もあります
つまり、$DB_Info-> ;where($condition)->getfield('Code'); は 2 回実行されますが、これはまた無駄な作業です


ありがとうございます。 !本当に私自身の理解の問題でした、とてもタイムリーな説明、ありがとうございました。 ! !
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!