我的課是從另一個類獨立。 在我的班級裏面,一個功能在做另一個班級的功能,但是做了相同但精練的工作。我可以使用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類擴展B類
Class B extends Class A
但是,你還可以:
class ClassA {
function do_something($args) {
// Do something
}
}
class ClassB {
function do_something_inclassA($args) {
classA::do_something($args);
}
}
重要:調用classa :: do_something();是靜態調用,換句話說,錯誤報告E_STRICT你會得到一個靜態的通知,警告,因爲功能do_something()不是靜態函數do_something()
此外,調用此函數靜態(即ClassA的:: do_something())意味着class a的函數不能引用$ this中的內容
謹慎解釋減號投票? – 2012-01-07 11:25:47
僅僅因爲某些東西似乎起作用並不意味着它應該被完成或鼓勵。因此警告。 – vascowhite 2012-01-07 11:25:52
「最好的你可以做」=鼓勵,「但你也可以」=純粹的教育,謝謝Shiplu – Prof83 2012-01-07 11:28:43
如果有任何類方法已經在執行相同的操作,爲什麼還要打擾加入呢?
你不能這樣做。如果你希望同樣的工作流程最好的辦法是實例化另一個類並調用同樣的方法。這就是爲什麼我們使用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);
}
}
爲什麼減去投票? – 2012-01-07 11:38:29
有人連續下了所有答案,不知道爲什麼,沒有留下評論。然而,在你的回答中,你正在'MyClass :: f()'中使用new運算符,這將使得它再次緊密耦合。取而代之的是在構造「MyClass」時注入它,這會更容易,而不會對它進行硬編碼,例如您稍後可以使用接口。不會使用'new'。 - 比較:http://stackoverflow.com/a/8769264/367456 – hakre 2012-01-07 11:49:18
@hakre由於提問者想要相同的工作流程,我把它緊密聯繫在一起。最好使用它作爲包含該方法的參數* interface *。更新。 – 2012-01-07 12:00:04
- 1. 當我有一個抽象類時,我可以讓另一個抽象類擴展那個類嗎?
- 2. pyqt4:我可以重寫一個沒有子類的方法嗎?
- 3. 有沒有可能擴展一個沒有Java構造函數的類?
- 4. Scala類可以擴展多個類嗎?
- 5. 從另一個類叫做類函數
- 6. 我可以做一個私人子類的靜態導入嗎?
- 7. 我可以從另一個部分類中調用一個部分類中定義的函數嗎?可能嗎?
- 8. 我可以從另一個類調用類(UIView的子類)內的方法嗎?
- 9. 檢查類構造函數是否擴展了另一個類
- 10. Java - 你可以將一個對象轉換成它沒有擴展的類嗎?
- 11. 我可以在TypeScript中擴展一個函數嗎?
- 12. JAVA是否可以動態地讓一個類擴展另一個類?
- 13. php中的call函數擴展了另一個類的值
- 14. 是否有可能擴展一個庫類擴展MY_Controller類
- 15. 聲明一個擴展另一個多態類的多態類
- 16. 我可以做一個包含另一個類的對象的定義構造函數嗎?
- 17. 初學者:在C#中擴展一個類,我做錯了嗎?
- 18. 一個XML模式枚舉可以擴展另一個嗎?
- 19. 有沒有一個庫可以給我一個在另一個類中出現的類的所有實例?
- 20. 我可以擴展代理類的子類嗎?
- 21. 一個Chrome擴展可以啓用或禁用另一個Chrome擴展嗎?
- 22. 另一個擴展類中的調用函數
- 23. 我可以typdef一個枚舉是另一個typdef枚舉的擴展嗎?
- 24. 參數擴展一個類
- 25. 如何在Scala中擴展一個擴展另一個類的類型參數的java類?
- 26. 擴展一個擴展類的模塊
- 27. 我怎樣才能引用一個擴展JPanel從另一個類的類
- 28. 鑄一類到另一個,從什麼擴展我的
- 29. PHPUnit:如何斷言一個類擴展了另一個類?
- 30. C#:從一個以上的類擴展
謝謝!這很清楚。 – Jenny 2012-01-07 11:43:56
不錯,非常清楚。 – Edward 2013-11-04 14:19:45