目次
ディスカッション (解決策) への返信
ホームページ バックエンド開発 PHPチュートリアル PHPクラスの継承に関する質問

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

Jun 20, 2016 pm 12:29 PM

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 回実行されますが、これはまた無駄な作業です


ありがとうございます。 !本当に私自身の理解の問題でした、とてもタイムリーな説明、ありがとうございました。 ! !
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

Instagram APIの紹介

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles