соглашения об именах — Как назвать несколько разные методы в PHP, чтобы он вел себя как ruby ​​& quot;! & quot; (Бах)

Я долго думал о том, как справиться с такой ситуацией:

Возьмем, к примеру, пример хеша:

hash  = {'a' => 'b', 'c' => 'd'}
other = {'a' => 'd'}

hash.merge(other)  # returns a new hash
hash.merge!(other) # modifies hash

Как бы вы справились с этим в php?

$hash  = new Hash(array( 'a' => 'b', 'c' => 'd' ));
$other = new Hash(array('a' => 'd'));

Опция params:

public function merge($other, array $options = array('mutate' => false))
{

}

// or

public function merge($other, $mutate = false)
{

}

Или, возможно, два разных имени метода:

public function merge($other)
{

}

public function mergeIntoSelf($other)
{

}

Мне нравится подход ‘param параметров’, но что, если метод на самом деле получает другой необязательный параметр, например, в ruby, который является обратным вызовом модификатора.

$hash->merge($other, function ($key, $originalValue, $otherValue) {
if ($key === 'foo') {
return $originalValue;
}

return $otherValue;
}, array('mutate' => true));

Опция обратного вызова может быть третьей, а не второй, но мне это не нравится. Мне также не нравится идея проверять параметры и пытаться выяснить, что к чему. У них блок документов становится волосатым.

Поэтому я хотел бы услышать ваше мнение о том, как вы к этому подойдете.

Заранее спасибо.

0

Решение

Ты можешь использовать & знак в имени функции, но это не хорошее решение. я хочу просто дать представление о том, что это возможно:

$a = array( 'a' => 'b', 'c' => 'd' );
$b = array('a' => 'd');
function mergeArray(& $a,$b) {
return $a = array_merge($a,$b);
}
$c = mergeArray($a,$b);
var_dump($a);
var_dump($c);

Вы можете видеть, что $ c и $ a будут одинаковыми.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]