Php 使用关联数组作为转换器
我一直在想,使用关联数组作为转换器是否有效(在资源和速度方面) 例如,假设我们有一个计算器类,它接收一个操作对象,然后调用一个函数来执行,Php 使用关联数组作为转换器,php,arrays,associative-array,Php,Arrays,Associative Array,我一直在想,使用关联数组作为转换器是否有效(在资源和速度方面) 例如,假设我们有一个计算器类,它接收一个操作对象,然后调用一个函数来执行,run()。为了检查用户试图使用的操作,我们可以执行if()或switch()然后设置正确的操作,或者执行类似new$operations[$operation]的操作其中$operation表示类似+或-的字符串,这些键的$operations数组值(相应地)是加法和减法。通过这样做,我们可以实例化所需的操作,而无需编写长的switch()或if()语句 代
run()
。为了检查用户试图使用的操作,我们可以执行if()
或switch()
然后设置正确的操作,或者执行类似new$operations[$operation]的操作
其中$operation
表示类似+
或-
的字符串,这些键的$operations
数组值(相应地)是加法
和减法
。通过这样做,我们可以实例化所需的操作,而无需编写长的switch()
或if()
语句
代码演示:
计算器.php
Operation.php
Addition.php
减法
现在,当我们使用这些类时:
$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();
第二种设置操作的方法是否有效(在资源和速度方面)?让我们假设我有一个数组
$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
好的,你面临的问题是什么?如果你考虑了较低的上限,那么你的解释有点混乱。以计算器为例开始,以首字母缩略词的翻译结束。“他们是怎么联系的?”事后诸葛亮很抱歉。我并没有真正面对真正的代码问题。我试图弄清楚使用关联数组而不是大的
if()
或switch()
语句是否有效。你可以离开首字母缩写部分,只关注计算器。@kfirba我想我肯定)。AFAIKswitch
操作符的速度并不比数组元素访问慢多少。无论如何,差别很小。所以在这种情况下,你不应该担心速度,谢谢你,但这不是我真正的意思。我在问,使用关联数组进行转换而不是switch()
或if()
语句是否有效
$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