你也可以使用匿名函数做到这一点
<?php
$socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or function() {
$errstr = socket_strerror(socket_last_error());
echo ("Failed to create socket: " . $errstr);
socket_clear_error();
};
?>
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
socket_clear_error — 清除套接字上的错误或最后一个错误代码
此函数清除给定套接字上的错误代码,如果未指定套接字,则清除全局最后一个套接字错误。
此函数允许显式重置套接字或扩展全局最后一个错误代码的错误代码值。这对于在应用程序的一部分中检测是否发生了错误可能很有用。
不返回值。
你也可以使用匿名函数做到这一点
<?php
$socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or function() {
$errstr = socket_strerror(socket_last_error());
echo ("Failed to create socket: " . $errstr);
socket_clear_error();
};
?>
如果你想用少量代码清除错误,可以像大多数人在 SQL 查询检查中所做的那样进行类似的 hack,
<?php
$result = mysql_query($sql) or die(/* Whatever code */);
?>
它看起来像这样
<?php
if (!($socket = socket_create(/* Whatever code */)) {
echo ("Failed to create socket: " . socket_strerror(socket_last_error()) and socket_clear_error());
}
?>
如你所见,这里我使用 "and" 而不是 "or",因为第一部分总是返回 true,因此如果你使用 or,PHP 的延迟布尔值检查不会执行最后部分,而如果第一部分为 true,则使用 and 会执行最后部分。