マイクラスは別のクラスとは独立しています。 私のクラスの中で、関数は別のクラスの関数と同じで洗練された仕事をしています。 parent:: function_in_another_class()
を使用して、私の機能を親ファンクションのジョブフローに参加させることはできますか?クラスを拡張せずに別のクラスの関数の子を作成できますか?
答えて
号
PHPであなただけのどれか一つのクラスから拡張することができます。両方のクラスが互いに独立していると書いているので、どちらか一方のクラスを見つけるための情報はありません。
しかし、あなたが探しているのは、おそらくこれです:
class A
{
function myFunction() {}
}
class B
{
private $a;
public function __construct(A $a)
{
$this->a = $a;
}
public function myFunction()
{
$this->a->myFunction();
}
}
現在のクラスが別のクラスの子であるならば、はい、できます。 parent
親クラスへの参照。 php.netから
:
<?php
class A {
function example() {
echo "I am A::example() and provide basic functionality.<br />\n";
}
}
class B extends A {
function example() {
echo "I am B::example() and provide additional functionality.<br />\n";
parent::example();
}
}
$b = new B;
// This will call B::example(), which will in turn call A::example().
$b->example();
?>
あなたがここにできる最善のは、クラスAから
Class B extends Class A
をクラスBを拡張することである。しかし、あなたはまた、次のことができます。
class ClassA {
function do_something($args) {
// Do something
}
}
class ClassB {
function do_something_inclassA($args) {
classA::do_something($args);
}
}
重要:classa :: do_something()を呼び出しています。エラーが::すなわちにClassA(静的にこの関数を呼び出し、関数do_something()はが静的関数do_something()も
ではありませんので、あなたが静的な通知警告が表示されますE_STRICTを報告するとともに、他の言葉で静的な呼び出しがあり、 do_something())は、クラスaの関数がその中の$ thisを参照できないことを意味します。
マイナス投票の説明に気をつけますか? –
何かがうまくいくように見えても、それが行われるべきではありません。したがって警告。 – vascowhite
"あなたができる最高" =奨励、 "しかし、あなたも" =純粋に教育的です、Shiplu – Prof83
クラスメソッドがすでに同じことをしている場合は、
あなたはできません。同じジョブフローを実行したい場合は、他のクラスをインスタンス化し、まったく同じメソッドを呼び出すことです。 OOPを使用する理由
例を参照してください、
interface Fable()
{
public function f();
}
class OtherClass implements Fable
{
public function f()
{
// job flow
}
}
class MyClass
{
private $fable;
public function __construct(Fable $f)
{
$this->fable = $f;
}
public function method1($args){
return $this->fable->f($args);
}
}
なぜマイナス投票ですか? –
誰かが一行ですべての回答を下降させたが、理由は分からず、コメントを残さなかった。しかし、あなたの答えでは 'MyClass :: f()'の中に新しい演算子を使用しています。代わりに、 'MyClass'が構築されたときにそれを注入します。それははるかに簡単です、あなたはそれをハードコードしません。後でインターフェースを使用することができます。 'new'では動作しません。 - 比較する:http://stackoverflow.com/a/8769264/367456 – hakre
@hakre質問者が同じ仕事の流れを求めていたので、私はそれを緊密に結合しました。このメソッドを含むパラメータとして、* interface *を使う方が良いでしょう。更新しました。 –
- 1. クラスに拡張せずにクラスを作成するときのC++で
- 2. 拡張せずにSphereクラスのジオメトリにアクセスできますか?
- 3. 別のクラスのクラス用の関数の拡張
- 4. Scalaクラスは複数のクラスを拡張できますか?
- 5. 別の拡張クラスから関数を呼び出す
- 6. Javaのデザイン:クラスとクラスの拡張子
- 7. 1つの抽象クラスが別の抽象クラスを拡張して機能を拡張できますか?
- 8. クラスが別のクラスを拡張する場合、拡張クラスを拡張するのではなく、初期化することはできますか?
- 9. 静的クラスは別のクラスを拡張しますか?
- 10. Javaクラスの拡張子
- 11. 抽象クラスから拡張クラスを作成するには?
- 12. HMCExtensionクラスを拡張できません
- 13. 変数からクラスを作成し、それを使って別のクラスを拡張するには?
- 14. フロータイプ:親クラスを返す関数から拡張クラスを使用
- 15. 別のものを拡張するPHPクラスはどのようにプライベート関数を継承できますか?
- 16. phpで複数のクラスを拡張できますか?
- 17. TypeScriptの抽象クラスの拡張匿名クラスを作成
- 18. Typescriptでは、ライブラリのクラスの拡張メソッドを作成します
- 19. JavascriptをES6で、子クラスの親クラスのメソッドを拡張
- 20. 拡張クラスのJavaコール関数
- 21. 拡張クラスの呼び出し関数
- 22. jQueryクラスと関数の拡張問題
- 23. Applicationクラスの拡張機能からフラグメントを作成できますか?
- 24. 別のクラスを拡張するクラスにインターフェイスを追加
- 25. 拡張クラスでは拡張クラスの型を受け入れません
- 26. 別のクラスを拡張するphpunitテストクラス
- 27. PHP:子クラスのメソッドで認証クラスを拡張する
- 28. Kotlinの別のクラスから静的な拡張関数にアクセスするには?
- 29. プロトコル専用のクラス拡張を作成することはできますか?
- 30. 拡張する新しいクラスを作成せずにクラスにメソッドを追加する方法。
ありがとう!これは十分明確です。 – Jenny
良い、非常にクリア。 – Edward