ホームページ > バックエンド開発 > PHPチュートリアル > オブジェクト指向に関する非常に基本的な初心者の質問です。アドバイスをお願いします。

オブジェクト指向に関する非常に基本的な初心者の質問です。アドバイスをお願いします。

WBOY
リリース: 2016-06-23 14:38:20
オリジナル
856 人が閲覧しました

クラス (実際には thinkPHP のコントローラー クラス) 内には、いくつかのステートメントを使用する多くのメソッド (すべてのメソッドではありません) があり、それらを 1 つの場所 (メソッドなど?) に統合して、どこでも呼び出すことができればと考えています。教えてください。書き方

現在のコードサンプルを投稿してください(間違っています)

class AbcAction extends BbcAction{    public function init(){        $model = M("table1");        $a = $model-> where("id = 1") -> getField("id");   //$a = 1        $this -> assign("a",$a);    }    public function test(){	$this->init()	echo $a;  	$model -> find(1);	//希望在这里能用到上边的$a和$model(实际上这样写是报错的,因为这是init内部的变量?	//init向前台传递的这个值,好像是可以的    } }
ログイン後にコピー


質問はとても簡単です、アドバイスをお願いします(今すぐ使うので、オブジェクト指向システムを学ぶ時間がありません)系統的に.. )


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

2 つの属性を設定してみていただけますか? $this->model=$model;$this->gt;a=$a; このようにして、クラスを呼び出すことができますが、最初に init() メソッドを呼び出す必要があります。

class AbcAction extends BbcAction{	public $model;	public $a;    public function init(){        $this->model = M("table1");        $this->a = $this->model-> where("id = 1") -> getField("id");   //$a = 1        $this -> assign("a",$this->a);    }    public function test(){		$this->init();//如果是等同__construct为构造函数,在实例化AbcAction时就会执行的话,可不调用		echo $this->a;  		$model -> find(1);		//希望在这里能用到上边的$a和$model(实际上这样写是报错的,因为这是init内部的变量?		//init向前台传递的这个值,好像是可以的    } }
ログイン後にコピー

init メソッドがデフォルトで実行され、init メソッドによって生成された中間結果が test メソッドで使用される場合
その場合、init メソッドによって生成された中間結果は、少なくともクラス内でグローバルである必要があります
class AbcAction extends BbcAction{
public function init(){
$this->model = M("table1"); $this-> $this-> $a = 1
$this -> ; assign("a",$this->a);
}

public function test(){
// $this->init()
echo $this->a; model -> find(1);
// ここで上記の $a と $model を使用できることを願っています (これは init 内の変数なので、実際にはエラーになります?
// 渡された値フロントプラットフォームへのアクセスは可能のようです
}}}
ありがとうございますが、このメソッドを共有する必要がある場合は、数十行の文があり、他の中間変数の中に数十の中間変数が必要になります。どこで使われても $this->xx と書くのは面倒です

私のニーズに何か問題があるのでしょうか、それとももっと良い方法はありますか?

関数内でそうですか?メソッド) はプライベートです。パブリックにしないとどうやって使えますか?
本当ですか?
関数 (メソッド) はプライベートです。公開しないなら使ってくれる?

あなたが話しているのを見るのがとても好きです

あなたの言葉は、私たち新参者が問題を解決するのに役立つだけでなく、非常に意味があります。

本当ですか?
関数 (メソッド) の変数は公開されていない場合、どうやって使用できますか?
このコード ブロックを参照する方法はありますか? 「共有関数の呼び出し」メソッドを使用せずに、共有する必要がある場所に追加することはできますか? この方法では、コード内のコンテンツを直接使用できます

そういえば、これはオブジェクト指向とは呼ばれず、単なる再利用です。

public function test()
{
// 以下の getData() メソッドを直接リクエストするには、ここにcurl メソッドをカプセル化します
//$url='http://192.168.1.1 /Module/controller/getdata () ';

Curl_Setopt ($ ch,curlopt_url, $ url);

}

これがあなたのニーズに適しているかどうかはわかりません。 。 。 。
publicパブリック関数テスト()あなたのニーズにより適していますか? 。 。 。


これは仕事が多すぎるように感じます... 必要な場所にこのコードをコピーする方が良いです...

もちろんですが、これは TP のスタイルではありません
thinkPHP は一度に 1 つの問題について議論することを推奨しています。は M です。 この関数は、データ テーブル インスタンスをロードするために単純に記述されています

この書き方が気に入らない場合は、もう使用する必要はありません
フレームワーク内に独自のネストを構築すると、深刻な調整の問題が発生します将来的に発生する可能性があります
結局のところ、そのコアを自由に変更することはできません


ですよね?
関数 (メソッド) 内の変数はプライベートです。公開しないとどうやって使用できますか?
あなたの財布からお金を取り出してもよろしいでしょうか?

「共有関数の呼び出し」メソッドを使用せずに、共有する必要がある場所にこのコード ブロックを参照する方法はありますか? この方法では、コード内のコンテンツを直接使用できます


すべきではありません。これはオブジェクト指向であり、単純な再利用です。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート