如果我有:PHP:require_once和繼承
<?php
require_once("bla.php");
class controller{.....}
php>
如果我再在不同的文件class control_A extends controller{...}
創建,我需要再說一遍require_once("bla.php");
,抑或是遺傳嗎?
如果require_once
在class controller
定義內完成,該怎麼辦?
謝謝!
JDelage
如果我有:PHP:require_once和繼承
<?php
require_once("bla.php");
class controller{.....}
php>
如果我再在不同的文件class control_A extends controller{...}
創建,我需要再說一遍require_once("bla.php");
,抑或是遺傳嗎?
如果require_once
在class controller
定義內完成,該怎麼辦?
謝謝!
JDelage
到目前爲止,我們有兩個矛盾的,但同樣正確的答案=)讓我們看看,如果我不能合併兩成一個更具體的總答案。
如果任何類需要bla.php
中的任何代碼或定義,那麼在腳本的整個運行時至少需要一次include("bla.php")
。如果您以前的代碼:
<?php
require_once("bla.php");
class controller{.....}
php>
是文件controller.php
,然後你可以通過以下方式創建control_A
:
<?php
require_once("controller.php");
class control_A extends controller{...}
?>
這是因爲require_once()
功能基本上是複製和粘貼文件的內容到該行的腳本。因此,上述將被視爲相同的:
<?php
/* INSERTED FROM controller.php */
/* INSERTED FROM bla.php */
necessary definitions for controller
/* END bla.php */
class controller{.....}
/* END controller.php */
class control_A extends controller{...}
?>
正如你所看到的,只是需要controller.php
,用於控制必要的定義,現在看到和解析。你可以不是做的是省略controller
的聲明。這不僅僅是因爲你在聲明它時需要bla.php
,而且你也不能擴展一個尚未聲明的類。所以下面的代碼:
<?php
class control_A extends controller{...}
?>
會給你一個錯誤,因爲控制器尚未定義。
但有一點需要考慮 - 因爲類controller
沒有擴展任何其他類,所以不應該有任何外部依賴關係。很有可能無論你在bla.php
中做什麼,在定義該類之前都必須運行,這是不必要的或者可以重新構造的。在定義controller
之前,bla.php
究竟做了什麼?
是的,你這樣做。 require_once "foo.php"
有效地採用foo.php
的內容並將它們粘貼(然後處理所有的其 s和include
s)。
你的措辭沒有意義。你說它處理包含的文件需要/包括但是你也說你需要單獨需要文件(你不這樣做)。 – 2010-10-11 15:10:24
啊,我在這裏看到這個問題。假設他在'foo.php'中定義了'Foo'類,並在該文件中包含了一些庫。憑藉擴展課程,他不會自動包含該圖書館。但是,因爲他包含'foo.php',他確實包含了有問題的庫。那有意義嗎? – 2010-10-11 16:15:40
只要你包含繼承的類,它不需要再次需要。
I.e.
class1.php:
<?php
require_once("tools.php");
class class1 {
}
?>
class2.php:
<?php
require_once("class1.php");
class class2 extends class1 {
}
?>
這取決於'bla.php'的作用? – 2010-10-11 15:01:49