AP计算机科学A(APcomputer science A)复习备考攻略视频教程
43754 人在学
对于初学者而言,可能很难理解为什么某些做法更安全。但是,以下一些技巧可能超出了 php 的范围。
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。自20世纪90年代国内互联网开始发展到现在,互联网信息几乎覆盖了我们日常活动所有知识范畴,并逐渐成为我们生活、学习、工作中必不可少的一部分。据统计,从2003 年开始,我国的网页规模基本保持了翻番的增长速度,并且呈上升趋势。PHP 语言作为当今最热门的网站程序开发语言,它具有成本低、速度快、可移植性好、 内置丰富的函数库等优点,因此被越来越多的企业应用于网站开发中。但随着互联网的不断更新换代,PHP语言也出现了不少问题。
让我们看下面的代码:
1
2
3
4
5
6
7
8
|
if (isset($condition) && true === $condition) echo 'this is a success' ; 虽然正确,但是你再看看下面的代码 if (isset($condition) && true === $condition) foreach (range( "A" , "Z" ) as $letter) echo $letter . PHP_EOL; echo 'this is a success' ; |
依旧正确,但是 this is a success 最终只 echo 了一次,这可能是一个陷阱。
等等,我们在来看看将 $condition = false;
写在判断之前会发生什么
1
2
3
4
5
|
$condition = false ; if (isset($condition) && true === $condition) foreach (range( "A" , "Z" ) as $letter) echo $letter . PHP_EOL; echo 'this is a success' ; |
该程序依旧成功打印 this is a success。
这显然不是我们想要的结果,你现在知道为什么花括号很重要了吧?
省略括号通常会导致不良的副作用。此外,阅读代码要困难得多。所以应当将其改写成这样
1
2
3
4
5
6
7
|
$condition = false ; if (isset($condition) && true === $condition) { foreach (range( "A" , "Z" ) as $letter) { echo $letter . PHP_EOL; } echo 'this is a success' ; } |
在使用任何变量之前,最好对它进行初始化。考虑以下例子:
1
2
3
4
5
|
if (isset($condition) && true === $condition) { $main = 'chocolate' ; } else { $main = 'vanilla' ; } |
如果你认为上面例子 OK 的话,那么试着添加几个 elseif
条件看看
1
2
3
4
5
6
7
8
9
10
11
12
13
|
if ($condition) { $main = 'chocolate' ; $time = 2; } elseif($otherCondition)) { $main = 'strawberry' ; $time = 3; } elseif($otherOtherCondition)) { $main = 'apple' ; $time = 1; } else { $main = 'vanilla' ; $time = 9; } |
该代码显得很笨重。当你在 elseif
代码块中添加逻辑时你可能会忘记一些变量。
试着这样做:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$main = 'vanilla' ; $time = 9; if ($condition) { $main = 'chocolate' ; $time = 2; } elseif($otherCondition)) { $main = 'strawberry' ; $time = 3; } elseif($otherOtherCondition)) { $main = 'apple' ; $time = 1; } |
这种方式,每个人都知道 $main
和 $time
变量在接下来的代码中应该被定义,该代码似乎更具可读性。
这种方式,每个人都知道 $main 和 $time 变量在接下来的代码中应该被定义,该代码似乎更具可读性。
在 PHP 中 @是一个错误控制操作符。它用于隐藏错误,但事实上没人希望如此。
相反,你应当试着捕获这些错误并使用错误日志记录。
@操作符有着极大的缺点,比如将任何调试变为噩梦或使代码运行更慢!
对于代码的每次运行,它都会调用 INI 设置以将 error_reporting 设为 0,并在这之后将其设回原始值。
它是如此耗费资源。我觉得完全不使用它才是更为安全的。
虽然三元运算符可能很方便,但代码有可能更加难以阅读。
三元运算可用于简化 if-else 部分:
1
|
$main = ($condition) ? "chocolate" : "vanilla" ; |
含义如下:
1
2
3
4
5
|
if ($condition) { $main = "chocolate" ; } else { $main = "vanilla" ; } |
上面的例子是 ok 的,但我已经看到过如下的例子:
1
|
$output = ($condition) ? ($otherCondition) ? 'ok' : 'ko' : 'unknown' ; |
不建议链式或嵌套式地使用三元运算。
Elvis 运算符是一个特殊的运算符。
$foo = $bar ?: "baz";
以上是指:
1
|
$foo = $bar ? $bar : "baz" ; |
可以这样写:
1
2
3
4
5
|
if ($bar) { $foo = $bar; } else { $foo = "baz" ; } |
信不信由你,正如维基百科所说:
“Elvis 运算符” 这个名字指的是这样一个事实:当它的符号?: 从侧面看时,就像是 埃尔维斯・普雷斯利 (Elvis Presley) 的一个表情符号和他的卷发。
自从 PHP7 起,null 合并运算符 可以用了:
需要将三元运算符与 isset()
结合使用的常见情况的语法。
因此:
1
|
$result = isset($_GET[ 'result' ]) ? $_GET[ 'result' ] : "default" ; |
可以这样写:
1
|
$result = $_GET[ 'result' ] ?? "default" ; |
在尝试使用空合并操作符替换 ternaries 和 Elvis 操作符时要格外小心!
空合并运算符从不检查条件是否为真,而是检查您的 var 是否已设置而不为空 ( isset() 的概念)。
我希望你喜欢这些编程技巧。我想说的最后一件事是:请不要为了简洁而牺牲了清晰度。
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。