0

これがPHP Landで可能かどうか疑問に思っています:

次のようなクラスがあるとしましょう。

class myClass{
  var $myVar;
    ...
  myMethod(){
      $this->myVar = 10;
  }
}

そして別のクラス:

class anotherClass {
   ...
   addFive(){
       $this->myVar += 5;
   }
}

「anotherClass」の長さは 3500 行で、myClass で使用する単一の「addFive」メソッドが必要です。

  • 関数をインポートしてクラスで呼び出すことができ、$this が myClass オブジェクトを参照する方法はありますか?
  • これは良い/悪い習慣ですか?
  • (オプション) これは Python ではどのように機能しますか? (私はPythonを学び始めているので、ちょっと興味があります)
4

3 に答える 3

2

より良いアプローチは、複雑なメソッドを独自のクラスに移動することです。次に、両方のクラスがそれをインスタンス化し、必要なデータを渡し、メソッドを呼び出すことができます。

于 2009-10-01T18:33:06.493 に答える
2

これを行う最も簡単な方法は、一方のクラスにもう一方のクラスを拡張させることです。

class myClass extends anotherClass {
}

myClassクラスは、パブリックまたは保護されているanotherClassのすべてのメソッドにアクセスできるようになりました。

クラスにもう一方のメソッドだけを持たせたい場合、または一方のクラスをもう一方のクラスから拡張するのが現実的でない場合、これを可能にするPHPには何も組み込まれていません。Googleに求めているコンセプトは、あるクラスの機能と別のクラスの機能をミックスインする場合のように、「ミックスイン」です。PHPでこの機能を実現するために試みることができるいくつかのパターンに関する記事が1つか2つありますが、私はそれを自分で試したことがありません。

良いアイデア/悪いアイデア?テクニックを習得すると、便利で便利になりますが、パフォーマンスが低下し、コードで行っていることを初心者が理解しにくくなります。特に、OOの概念にあまり詳しくない人はそうですが、これに限定されません。

于 2009-10-01T18:41:57.630 に答える
0

myClassが anotherClass を拡張する場合、 anotherClass のすべてのメソッドとプロパティを継承します (private とマークされたものを除く)。

class AnotherClass {
  protected $myVar;
  public function addFive(){
    $this->myVar += 5;
  }
}

class MyClass extends AnotherClass {
  public function __construct() {
    $this->myVar = 0;
  }

  public function myMethod(){
    $this->myVar = 10;
  }
}

$m = new MyClass;
$m->myMethod();
$m->addFive();
var_dump($m);

版画

object(MyClass)#1 (1) {
  ["myVar":protected]=>
  int(15)
}
于 2009-10-01T18:29:38.730 に答える