использование ассоциативных массивов в качестве переводчиков

Некоторое время я задавался вопросом, насколько эффективно (с точки зрения ресурсов и скорости) использовать ассоциативные массивы в качестве трансляторов?

Например, скажем, у нас есть класс калькулятора, который получает объект операции, а затем вызывает функцию для выполнения, run(), Чтобы проверить, какую операцию пытается использовать пользователь, мы можем выполнить if() или же switch() а затем установить правильную операцию или, мы можем сделать что-то вроде new $operations[$operation] где $operation представляет строку как + или же - и $operations Значения массива для этих ключей (соответственно) Addition а также Subtraction, Делая это, мы можем создать экземпляр нужной нам операции без написания switch() или же if() заявление.

Демонстрация кода:

Calculator.php

class Calculator {

protected $result = null,
$operands = [],
$operation;public function setOperands() {
$this->operands = func_get_args();
}

public function setOperation(Operation $operation)
{
$this->$operation = $operation;
}

public function calculate() {

foreach($this->operands as $num) {

if( ! is_number($num))
throw new \InvalidArgumentException;

$this->result = $this->operation->run($num, $this->result);
}

}

}

Operation.php

interface Operation {
public function run($num, $current);
}

Addition.php

class Addition implements Operation{

public function run($num, $current) {
return $num + $current;
}

}

Subtraction.php

class Subtraction implements Operation {

public function run($num, $current) {
return $num - $current;
}

}

Теперь, когда мы используем эти классы:

$calculator = new Calculator();

// input from user
$operation = "+";$calculator->setOperands(1,2,3);

/**
* One way to set the operation
*/

// set the operation
switch($operation) {

case '+':
$calculator->setOperation(new Addition);
break;
case '-':
$calculator->setOpration(new Subtraction());
break;
// and so on..

}

$calculator->calculate();

/**
* Second way to set the operation
*/

$operations = ['+' => 'Addition', '-' => 'Subtraction']; // can add more

$calculator->setOperation(new $operations[$operation]);

$calculator->calculate();

Это второй способ установки операции эффективен (в смысле ресурсов и скорости)?

0

Решение

Давайте думать, у меня есть массив

$acronyms = ['AFAIK' => 'As far as I know', 'MVP' => 'Most valuable player'];

И Строка, чтобы получить Перевод

$string = "AFAIK I do the MVP";

Сейчас сделаю это

echo strtr($string,$acronyms);

Теперь мой вывод будет

As far as I know I do the Most valuable player
0

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

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