我正在决定是否在PHP站点中使用if/else与switch/case我正在写作,我想知道使用其中一种是否有任何好处,或者在某些情况下是否打算使用一种而不是另一种。 最佳答案 这个问题很有趣,因为在编译语言(甚至是JIT语言)中,使用switch语句会带来很好的性能提升,因为编译器可以构建跳转表,并且会在恒定时间内运行。甚至可以优化字符串的开关,因为可以对字符串进行哈希处理。但是,根据我的阅读,php似乎没有进行此类优化(我假设是因为它是逐行解释和运行的)。关于开关优化的很棒的.Net文章:Ifvs.SwitchSpeed关于解释p
是否可以将驼峰式字符串解析为更具可读性的字符串。例如:本地企业=本地企业CivicStructureBuilding=市政结构建筑getUserMobilePhoneNumber=获取用户手机号码bandGuitar1=乐队吉他1更新使用simshaun正则表达式示例我设法使用此规则将数字与文本分开:functionparseCamelCase($str){returnpreg_replace('/(?!^)[A-Z]{2,}(?=[A-Z][a-z])|[A-Z][a-z]|[0-9]{1,}/','$0',$str);}//string(65)"customerIDWithSome
我有这个函数负责将文件名和mime类型转换为更“人性化”的东西(例如file.png、image/png到[Image,PNG])。我发现有趣的是,if()elseif()语句组的NPath复杂度高于switch(true)语句。使用以下代码,PHPMessDetector输出4410的NPath:publicfunctionhumanKind(){$typeRA=explode("/",strtolower($this->type));$fileRA=explode(".",$this->name);$fileType=strtoupper($fileRA[count($fileRA
我只是假设以下几点:foreach($arras$key=>$value){switch($key){//...someothercasesdefault:continue;//^==assumption:moveontothenextiterationoftheforeach//actualPHP:treatthiscontinuejustlikeabreak}//...}但实际上,根据documentationforcontinue:theswitchstatementisconsideredaloopingstructureforthepurposesofcontinue.PHP
我在PHP中使用preg_replace来查找和替换字符串中的特定单词,如下所示:$subject="Appleapple";printpreg_replace('/\bapple\b/i','pear',$subject);结果为'pearpear'。我想做的是以不区分大小写的方式匹配一个单词,但在替换它时尊重它的大小写-给出结果“Pearpear”。以下工作,但对我来说似乎有点啰嗦:$pattern=array('/Apple\b/','/apple\b/');$replacement=array('Pear','pear');$subject="Appleapple";print
我有以下php代码,它给我带来了意想不到的结果:$foo=NULL;switch($foo){case0:print"What?!";}我希望结果什么都没有,但它与情况0匹配。php手册说NULL是一个非值,那么它怎么可能等于0? 最佳答案 switch语句适用loosecomparison这意味着以下内容被视为等同于0:false0"0"NULL"anystring""" 关于switch语句中的php空值混淆,我们在StackOverflow上找到一个类似的问题:
PHP手册suggests自动加载类,如function__autoload($class_name){require_once("some_dir/".$class_name.".php");}并且这种方法可以很好地加载保存在文件my_dir/FooClass.php中的类FooClass像classFooClass{//someimplementation}问题如何才能使用_autoload()函数并访问my_dir/foo_class.php文件中保存的FooClass? 最佳答案 你可以像这样转换类名......functi
当我通常想在所有迭代完成之前跳出foreach循环时,我只需使用break;陈述。例如foreach($nodelistas$node){if($metCriteria){break;}}但我的下一个示例中有一个switch语句。如果满足其中一个条件,那么我需要从foreach循环中跳出。(问题是break用于switch语句)foreach($nodelistas$node){switch($node->nodeName){case"a"://dosomethingbreak;case"b"://breakoutofforloopbreak;}}我是否只是在switch语句中设置一个
我正在解析一些文本并根据一些规则计算权重。所有字符具有相同的重量。这会使switch语句变得很长我可以在case语句中使用范围吗?我看到一个提倡关联数组的答案。$weights=array([a-z][A-Z]=>10,[0-9]=>100,['+','-','/','*']=>250);//therearemoreruleswhichhavebeenleftoutforthesakeofclarityandbrevity$total_weight=0;foreach($textas$character){$total_weight+=$weight[$character];}echo
我有一个变量保存值“每周”、“每月”、“季度”和“年度”,我还有另一个变量保存从1到10的值。switch($var2){case1:$var3='Weekly';break;case2:$var3='Weekly';break;case3:$var3='Monthly';break;case4:$var3='Quarterly';break;case5:$var3='Quarterly';break;//etc.}它并不漂亮,因为我的代码有很多重复项。我想要什么:switch($var2){case1,2:$var3='Weekly';break;case3:$var3='Month