PHP的编码风格;未找到任何记录";,当需要整数时
对于返回“未找到此类记录”的函数,PHP中的最佳返回值是什么 考虑以下问题的简化示例:PHP的编码风格;未找到任何记录";,当需要整数时,php,coding-style,Php,Coding Style,对于返回“未找到此类记录”的函数,PHP中的最佳返回值是什么 考虑以下问题的简化示例: function getLatestPostId() { $postId = Db::latestPostId(); return (is_null($postId)) ? null : $postId; // Is returning null the best option? } 我通常的方法是返回null,但我混合了integer和null作为函数的可能返回类型 我在别处读到的
function getLatestPostId()
{
$postId = Db::latestPostId();
return (is_null($postId)) ? null : $postId;
// Is returning null the best option?
}
我通常的方法是返回null
,但我混合了integer
和null
作为函数的可能返回类型
我在别处读到的相关原则:
- 不返回混合类型(例如,如果需要布尔值,则始终返回布尔值,而不是null)
- 如果返回数组,但未找到任何项,则返回空数组
If(!result)
If(!result)
你使用什么风格其实并不重要,只要它有意义并且你坚持下去。如果它在整个应用程序中都是一致的,并且对您有效,那么就可以了 如果没有最新的帖子,并且这不是一个有问题的状态,那么在这里返回
null
基本上没有什么错。返回混合类型是PHP等语言的优势之一,如果滥用它可能会导致问题,但这不是滥用
最重要的是保持一致性:不要将标量和数组作为返回值混合使用,不要将原语和对象类型混合使用
理论上,如果一个最新的帖子总是被认为存在,那么返回混合类型将是一种报告错误情况的机制;在这种情况下,事情开始变得不那么清晰,抛出一个异常可能是正确的。如果没有最新的帖子,并且这不是一个有问题的状态,那么在这里返回
null
从根本上说没有什么错。返回混合类型是PHP等语言的优势之一,如果滥用它可能会导致问题,但这不是滥用
最重要的是保持一致性:不要将标量和数组作为返回值混合使用,不要将原语和对象类型混合使用
理论上,如果一个最新的帖子总是被认为存在,那么返回混合类型将是一种报告错误情况的机制;在这种情况下,事情开始变得不那么清晰,抛出异常可能是正确的。实际上取决于您的应用程序。你需要身份证吗?在这种情况下,抛出一个异常。您的应用程序在没有ID的情况下能否正常运行?只需返回
null
并处理它。实际上取决于您的应用程序。你需要身份证吗?在这种情况下,抛出一个异常。您的应用程序在没有ID的情况下能否正常运行?只要返回null并处理它。怎么样,因为==
(检查值和类型)的发明,很多PHP自己的函数返回FALSE或预期值,不管是什么
如果你养成了使用这种结构的习惯,一切都会好起来
$x = function();
if ( $x === FALSE ) {
// error situation
} else {
// all is well proceed
}
当然,更好的方法是使用异常throw
catch
。然后,在错误情况下返回的数据类型是标准的,即异常对象
function getLatestPostId()
{
$postId = Db::latestPostId();
if (is_null($postId)) {
throw new Exception('PostId is not available');
}
return $postId;
}
....
try {
$x = getLatestPostId();
// code when postid is available goes here
}
catch Exception($e) {
// when posyId is not available do this
}
既然
==
(检查值和类型)的发明,很多PHP自己的函数返回FALSE
或预期值,不管是什么
如果你养成了使用这种结构的习惯,一切都会好起来
$x = function();
if ( $x === FALSE ) {
// error situation
} else {
// all is well proceed
}
当然,更好的方法是使用异常throw
catch
。然后,在错误情况下返回的数据类型是标准的,即异常对象
function getLatestPostId()
{
$postId = Db::latestPostId();
if (is_null($postId)) {
throw new Exception('PostId is not available');
}
return $postId;
}
....
try {
$x = getLatestPostId();
// code when postid is available goes here
}
catch Exception($e) {
// when posyId is not available do this
}
不混合返回值是一个很好的原则,但php本身并不坚持这一点。这更像是一个一般的编程原则,对于其他编程语言,如C和Java,这是一个严格的原则。例如,在Java中,一个函数(或方法,就像在那里调用的那样)只能返回一种变量类型,函数封装外形看起来像这样强制它(注意方法名称前面的
int
,它定义了预期的返回值):
如果你想告诉打电话的人什么也没找到(通过发出警告,或者如果你想更严格一些,说这是一个错误),你必须抛出一个异常
Php与其他编程语言有点不同,因为它对变量类型非常灵活。在示例中,请查看以下php代码:
$my_var = 12; // now i'm an integer
$my_var = 12 .' is a number'; // now i'm a string
没有做任何事情,变量突然变成了字符串。如果您想在Java中执行同样的操作,则必须执行以下操作:
int myInteger = 12;
String myString = myInteger + " is a number";
如您所见,您必须声明另一个变量。这是因为Java在内存中为整数保留了一定的空间,整数有最小和最大大小。但是,字符串(不是基本数据类型)实际上可以有任何大小。Php为您处理所有这些,因此您不必担心它,也不必事先告诉您的变量包含什么样的值
现在看一些php函数。在示例中,函数date
返回字符串,如果出现错误,则返回布尔值false
explode
返回数组或布尔值false
function getLatestPostId() {
// try to fetch the post id
if($no_post_id_found) {
throw new Exception('No last post id found...');
}
// all set, return the id!
return $last_post_id;
}
try {
$post_id = getLatestPostId();
} catch (Exception $e) {
echo 'Something went wrong: '. $e->getMessage();
}