忘了PHP函数的参数顺序,它们是随机的吗?
PHP is a glue that brings together hundreds of external libraries, so sometimes this gets messy. However, a simple rule of thumb is as follows:
Array functionparameters are ordered as " needle, haystack" whereas String functionsare the opposite, so " haystack, needle".
译:数组相关方法的参数顺序为,「needle, haystack」,字符串相关方法则是相反的 「haystack, needle」,
来源: https://www.php.net/manual/zh/faq.using.php#faq.using.parameterorder
我应该如何保存“盐”?
当使用 password_hash() 或者 crypt() 函数时, “盐”会被作为生成的散列值的一部分返回。 你可以直接把完整的返回值存储到数据库中, 因为这个返回值中已经包含了足够的信息, 可以直接用在 password_verify() 或 crypt() 函数来进行密码验证。
下图展示了 crypt() 或 password_hash() 函数返回值的结构。 如你所见,算法的信息以及“盐”都已经包含在返回值中, 在后续的密码验证中将会用到这些信息。
来源: https://www.php.net/manual/zh/faq.passwords.php#faq.password.storing-salts
下面代码怎么没有分成两行显示?
在 PHP 中,一段代码的结束标记要么是“?>”要么是“?>n”(n 表示换行)。因此在上面的例子中,输出的句子将显示在同一行中,因为 PHP 忽略了代码结束标记后面的换行。这意味着如果要输出一个换行符,需要在每段 PHP 代码的结束标记后面多加一个换行。
PHP 为什么这么做呢?因为在格式化正常的 HTML 时,这样通常会更容易。假如输出了换行而你不需要这个换行时,就不得不用一个非常长的行来达到这样的效果,或者让产生的 HTML 页面的源文件的格式很难读。
来源: https://www.php.net/manual/zh/faq.using.php#faq.using.newlines
字符串连接操作符的优先级问题
如果你运行下面的代码,他将会输出一个
警告
和结果3
,因为字符串连接操作符.
和 数学运算符+
、-
的优先级时一样的,它们将从左往右执行。Result:
会被强转成数组0
。如果你在低版本的 PHP 中运行,会告诉你 中边不是一个数字,如果你在 7.4 中运行,会告诉你,在 PHP 8 中+
、-
的优先级将会被提高。如果你使用了 PHPSTORM 中的 EA 插件,将会提醒你这个问题。