php在函数中测试isset()和empty()
我试图将isset()和empty()封装在函数中 它在我的家庭开发服务器(apache 2.4.3,WinXP下的PHP5.2.17)上运行良好。当我把它移植到运行Fedora的大学Linux机器上时,我收到了关于未定义索引的通知 我在家用电脑上检查了php.ini,错误报告设置为all。我将错误报告(E_ALL)放入;在我的PHP脚本中尝试复制错误。没有发生 问题1:为什么我的家用电脑没有收到通知 以下是我的功能:php在函数中测试isset()和empty(),php,isset,Php,Isset,我试图将isset()和empty()封装在函数中 它在我的家庭开发服务器(apache 2.4.3,WinXP下的PHP5.2.17)上运行良好。当我把它移植到运行Fedora的大学Linux机器上时,我收到了关于未定义索引的通知 我在家用电脑上检查了php.ini,错误报告设置为all。我将错误报告(E_ALL)放入;在我的PHP脚本中尝试复制错误。没有发生 问题1:为什么我的家用电脑没有收到通知 以下是我的功能: <?php function there($s) { if (
<?php
function there($s) {
if (! isset($s)) {
return false;
}
if (empty($s)) {
return false;
}
return true;
}
?>
我切换了我的函数,以便在测试isset()之前测试empty(),认为这样可以避免收到通知。我还没有机会在学校测试这个
问题2:如果变量未定义或未设置,empty()通常会避免发出通知吗
问题3:我可以使用there()函数来执行此操作,还是只通过传递未定义或未设置的参数来获得通知?
isset
和empty
不是函数,它们是语言构造。因此,他们可以通过读取文本变量名而不是试图访问值等方式逃脱惩罚。您定义的任何函数都不能这样做
考虑到这一点,没有必要对两者都进行测试
empty
是isset
的超集,因此您只需检查empty您的函数几乎等同于!空的
:
if (empty($_SESSION['u'])) {
$_SESSION['u'] = new User();
}
唯一的区别是:如果你的包装器函数传递了一个不存在的变量,它会抱怨——然而,作为一种语言构造,它不会(也不会)
你的次级问题
为什么我的家用电脑没有收到通知
可能是因为你已经关机了
如果变量未定义或未设置,empty()通常会避免发出通知吗
对
我可以使用there()函数来执行此操作,还是只通过传递未定义或未设置的参数来获得通知
你会收到关于未定义变量的通知。作为证明@Kolink的回答很好的一种方式,我没有意识到
echo '<form action="" method=POST>
<input type=text value="" name="string" />
<input type=text value=0 name="int" />
<input type=submit />
</form>';
if( empty($_POST['string'] ) ){
var_dump( $_POST['string']) ;
}
if( empty($_POST['int'] ) ){
var_dump( $_POST['int']) ;
}
if( empty($_POST['something'] ) ){
echo 'something was not set, but you cannot var_dump it without a warning';
}
echo'
';
if(空($_POST['string']){
变量转储($_POST['string']);
}
if(空($_POST['int']){
变量转储($_POST['int']);
}
如果(空($_POST['something']){
echo“未设置某些内容,但您无法在没有警告的情况下将其转储”;
}
我意识到这是一个旧线程,它已经有了一个公认的答案。因此,我不会在这里再次回答这些问题。但出于完整性的考虑,并希望它能帮助其他人,我正在分享我使用的东西。
请看下面的代码:
<?php
echo var_dump($_SESSION['something']);
So empty()将告诉我变量未定义或没有任何内容?您可以在internet上找到它。右侧的相关菜单中充满了isset()
vsempty()
甚至是vsin_null()
这也很有用
<?php
echo var_dump($_SESSION['something']);
<?php
echo var_dump(mycheck($_SESSION['something']));
function mycheck( &$var ){ // Note the & so we are passing by reference
return $var;
}