什麼,我試圖找出是不好的做法,實例化一個類像Class實例變量沒有
new Classname();
,因爲我需要運行__construct的類,但我並不需要使用類過去那種。因爲該類中的其他函數將從__construct中調用。
什麼,我試圖找出是不好的做法,實例化一個類像Class實例變量沒有
new Classname();
,因爲我需要運行__construct的類,但我並不需要使用類過去那種。因爲該類中的其他函數將從__construct中調用。
它會工作,但作爲維護你的代碼的人,我會被這個超級困惑。一般來說,僅僅實例化一個對象沒有副作用,所以我會假設我可以刪除該行,並且所有東西都可以正常工作。
我建議重新考慮你的代碼的結構,因爲在__construct
的代碼中帶有副作用絕對不是標準。
該類在全局範圍內的乾淨輸入中做了什麼,因此它並不真的需要一個變量。那麼,仍然值得把變量放在那裏嗎? – 2011-05-25 03:43:11
克里斯,只是爲了更多的理解。 – gaRex 2011-05-25 05:24:39
@Chris R,更好的解決方案就像'$ input = new InputFilter($ _ POST)',然後使用'$ input ['foo']'而不是'$ _POST ['foo']''。如果不使用'$ _POST',則可能有'$ globalfoo = new InputFilter($ globalfoo)'之類的東西。在函數內部使用全局變量('global'關鍵字)本身幾乎總是一種不好的做法。 – Matthew 2011-05-25 05:33:35
考慮使用這樣的事情,而不是:
class Foo
{
public static function do_something()
{
// ...
}
}
Foo::do_something();
雖然你有什麼工作,目前尚不清楚有些事情是應該發生的。
(如果你非要用這樣的對象,至少文檔很清楚,只要你做到這一點。)
這也是可能的,可能會比一些變量更多。看起來,如果您將邏輯移至__construct,那麼您的代碼在這裏功能更強大,而不是OOP。 – gaRex 2011-05-25 05:25:31
那麼讓我們只想說,我們有一個叫做的HelloWorld到一個文件中的類名。
文件class.HelloWorld.php
class HelloWorld {
function __construct()
{
}
public function doSomething(){
echo "new HelloWorld()->doSomething() was called";
}
public function anotherMethod(){
echo "new HelloWorld()->anotherMethod() was called";
}
}
現在你可以實例上運行的類,但不保存到一個變量。
require('class.HelloWorld.php');
// you can just instantiate it and the constructur will be called automatically
(new HelloWorld());
// or you can instantiate it and call other methods
(new HelloWorld())->doSomething();
我不知道如果垃圾收集將刪除實例化類或沒有,但我相信,因爲這些類不保存到這會不會在內存的某個地方保存一個變量,那將是完美的。
**爲什麼**你想這樣做?它幾乎聽起來像你正在設置單身的默認值.. – 2011-05-25 03:44:33
構造函數的唯一責任是準備對象以供使用。除此之外,它不得做任何事情,它不得有副作用。確實,將所有對象的行爲都放在構造函數中是一種不好的做法。當然也有例外,但是如果你的類不需要析構函數,那麼你沒有達到這樣的例外。 – axiac 2017-10-09 10:16:55