2013-12-12 52 views
2

我有以下情況:一個類中存儲鍵值的數組並返回void。
這是方法:如果有時只需要,我應該總是返回一些東西嗎?

<?php 
abstract class MyClass 
{ 
    // ... 

    protected function setAttribute($name, $value, $skipCasting = null) 
    { 
     // ... 

     $this->attributes[$name] =& $value; 
    } 

    // ... 
} 

現在我用這個方法在我的應用程序和我剛纔設置的屬性次,次,另外50%50%,好幾次我還需要回我正在設置的值。

我想知道,在性能方面,如果我總是返回東西會有一個(顯著)記憶力減退

+0

OOP中通常的做法是返回$這一點,這樣你可以鏈制定者/等功能 – Jessica

+2

@Jessica http://en.wikipedia.org/wiki/Fluent_interface –

回答

1

現在,我在我的應用程序中多次使用這種方法,並且我只設置了屬性的50%,對於另外50%的時間我也需要返回我設置的值。

在這種情況下,你可能需要兩種不同的方法setter和一個getter,像這樣的例子: -

abstract class MyClass 
{ 
    // ... 

    protected function setAttribute($name, $value, $skipCasting = null) 
    { 
     // ... 

     $this->attributes[$name] =& $value; 
    } 

    public function getAttribute($name) 
    { 
     return $this->attributes[$name]; 
    } 
} 

調用適用功能根據您的需要的方式。

我想知道,在性能方面,如果我總是會返回一些會有(重大)內存損失?

不,不用擔心,如果你不需要使用它們,你可以很安全地忽略任何方法或函數的返回值。

+0

感謝@vascowhite,其實我已經有一個getter 。這一點是避免調用另一種方法。這可以通過setAttribute()已經返回一個值來完成! – jan267

+0

在這種情況下,忽略我的答案的前半部分:) – vascowhite

+0

大聲笑好!謝謝:) – jan267

0

您主要關心的是內存分配/性能? PHP自己做垃圾收集,通常作爲一個單獨的線性過程來執行,因此內存分配等並沒有真正考慮。

它不是最好的做法,對內存分配沒有興趣,但是在單線程,單數進程中,它比在基於多線程的基於.net的服務中不那麼重要。

編輯:如果您選擇頗爲關心的內存管理,這個腳本執行很長一段時間,看看

http://www.php.net/manual/en/features.gc.php

它顯示瞭如何做一些垃圾收集在長時間運行的腳本。

1

如果在很大程度上取決於解釋器,但在大多數語言中,函數的返回值只是一個推入堆棧的值,然後由調用者彈出。

在諸如PHP這樣的高級語言中,它有自己的內存管理器和垃圾回收器,擔心這些事情有點太多,但是如果你真的擔心它,那麼它可能更安全將該值存儲在一個變量中,然後調用該函數並在之後使用它。

相關問題