Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php在函数中测试isset()和empty()_Php_Isset - Fatal编程技术网

php在函数中测试isset()和empty()

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 (

我试图将isset()和empty()封装在函数中

它在我的家庭开发服务器(apache 2.4.3,WinXP下的PHP5.2.17)上运行良好。当我把它移植到运行Fedora的大学Linux机器上时,我收到了关于未定义索引的通知

我在家用电脑上检查了php.ini,错误报告设置为all。我将错误报告(E_ALL)放入;在我的PHP脚本中尝试复制错误。没有发生

问题1:为什么我的家用电脑没有收到通知

以下是我的功能:

<?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()
vs
empty()
甚至是vs
in_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;
}