2013-12-12 3 views
2

У меня есть следующий сценарий: класс с методом, который хранит значение ключа в массиве и возвращает void.
Это метод:Если нужно только иногда, должен ли я всегда что-то возвращать?

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

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

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

    // ... 
} 

Теперь, я использую этот метод несколько раз в моем приложении и на 50% от времени я просто установить атрибут, для остальных 50% от времени я также нужно возвращать значение, которое я устанавливаю.

мне было интересно, с точки зрения производительности, если я всегда вернуться что-то было бы (значащий) потеря памяти?

+0

Обычная практика в ООП состоит в том, чтобы вернуть $ this, таким образом, вы можете связывать сеттеры/другие функции – Jessica

+2

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

ответ

1

Теперь я использую этот метод несколько раз в своем приложении, и в течение 50% времени я просто устанавливаю атрибут, а для остальных 50% времени мне также нужно вернуть значение, которое я устанавливаю.

В этом случае вам, вероятно, потребуется два разных метода сеттера и геттер, как это, например: -

abstract class MyClass 
{ 
    // ... 

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

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

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

Таким образом, вы вызываете функцию применимую в зависимости от ваших потребностей.

Мне было интересно, с точки зрения производительности, если бы я всегда возвращал что-то, что было бы (значительная) потеря памяти?

Нет, о чем не о чем беспокоиться, вы можете совершенно спокойно игнорировать возвращаемые значения любого метода или функции, если вам не нужно их использовать.

+0

Спасибо @vascowhite, на самом деле у меня уже есть геттер , Дело в том, что нельзя было вызвать другой метод.Это можно сделать, если 'setAttribute()' уже возвращает значение! – jan267

+0

В этом случае игнорировать первую половину моего ответа :) – vascowhite

+0

Lol good! Спасибо :) – jan267

0

Является ли ваше основное распределение памяти памяти/производительность? PHP делает свою собственную сборку мусора и обычно выполняется как сингулярный линейный процесс, поэтому распределение памяти и т. Д. На самом деле не рассматривается.

Не самая лучшая практика, которая не заинтересована в распределении памяти, но в одном поточном, единственном процессе ее менее важно, чем сказать в многопоточной службе на основе .net.

EDIT: Если Youre очень обеспокоены управления памятью и этот сценарий выполняется в течение длительного времени, проверьте

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

Он показывает, как сделать некоторые сбор мусора в длительных сценариев.

1

Если во многом зависит от интерпретатора, но на большинстве языков возвращаемое значение функции - это просто значение, вставляемое в стек, а затем выбитое вызывающим.

В языке высокого уровня, таких как PHP, который имеет свой собственный менеджер памяти и сборщик мусора, заботясь об этих вещах многовато, но если вы на самом деле беспокоит, то это, наверное, безопаснее просто для сохранения значения в переменной, вызовите функцию и используйте ее впоследствии.

Смежные вопросы