28

ユーザーがファイルをアップロードし、名前を入力しないとエラーが返されるスクリプトを作成しようとしています。is_null、empty、およびissetを使用してみましたが、すべて機能しません。たとえば、以下では、名前が入力されている場合でも、is_nullはエラーを返します。誰か助けてもらえますか?

$caption = $_REQUEST[$name_input_name];

if(is_null($caption)) {
    $file->error = 'Please Enter a Title';
    return false;
}
4

14 に答える 14

22

is_null()変数が設定されていない場合は警告を発しますが、設定されisset()empty()いません。

$a - variable with not null value (e.g. TRUE)
$b - variable with null value. `$b = null;`
$c - not declared variable
$d - variable with value that cast to FALSE (e.g. empty string, FALSE or empty array)
$e - variable declared, but without any value assigned
$a->a - declared, but not assigned object property. (`public $a;`)
A::$a - declared, but not assigned static class property.

         |   $a  |   $b  |   $c  |   $d  |   $e  | $a->a | A::$a |
---------+-------+-------+-------+-------+-------+-------+-------+
is_null()| FALSE | TRUE  |TRUE*W | FALSE | TRUE*W| TRUE  | TRUE  |
---------+-------+-------+-------+-------+-------+-------+-------+
isset()  | TRUE  | FALSE | FALSE | TRUE  | FALSE | FALSE | FALSE |
---------+-------+-------+-------+-------+-------+-------+-------+
empty()  | FALSE | TRUE  | TRUE  | TRUE  | TRUE  | TRUE  | TRUE  |
---------+-------+-------+-------+-------+-------+-------+-------+
null === | FALSE | TRUE  |TRUE*W | FALSE | TRUE*W| TRUE  | TRUE  |
---------+-------+-------+-------+-------+-------+-------+-------+
null ==  | FALSE | TRUE  |TRUE*W | TRUE  | TRUE*W| TRUE  | TRUE  |
---------+-------+-------+-------+-------+-------+-------+-------+

TRUE*W - function return TRUE, but same time emits WARNING.

empty ()関数のドキュメントページで、次のことを読むことができます。

次のものは空であると見なされます。

...。

$ var; (宣言された変数ですが、値はありません)

コード$var;が変数を定義しているが、それに値を割り当てていないことは誤解を招く可能性がありますが、それは間違っています。変数はまだ定義されておらず、引数として渡すと警告を発する$varなどの型認識関数があります。is_null()$var

ただし、未解決のクラスまたはオブジェクトのプロパティには適していません。値を割り当てずに宣言すると、自動的にNULLが割り当てられます。

PHP 7.4のUPD型付きプロパティは、デフォルトではNULLによって割り当てられません。それらに値を設定しない場合、それらは未割り当てと見なされます。

いくつかの低レベルの説明:

isset()およびempty()はコア関数であり、zvalタイプに従って特定のオペコードに直接コンパイルされます。

ZEND_ISSET_ISEMPTY_THIS
ZEND_ISSET_ISEMPTY_CV
ZEND_ISSET_ISEMPTY_VAR
ZEND_ISSET_ISEMPTY_DIM_OBJ
ZEND_ISSET_ISEMPTY_PROP_OBJ
ZEND_ISSET_ISEMPTY_STATIC_PROP

さらに、それらは同じ関数でコンパイルされますzend_compile_isset_or_empty

関数is_null()は、、、などの型認識関数です。また、オペコードなどを使用したユーザー定義関数のように呼び出されます。is_numericis_recourceis_boolINIT_FCALL_BY_NAME/DO_FCALL_BY_NAME

/* {{{ proto bool is_null(mixed var)
   Returns true if variable is null
   Warning: This function is special-cased by zend_compile.c and so is usually bypassed */
PHP_FUNCTION(is_null)
{
    php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);
}
于 2017-07-29T12:09:30.527 に答える
16

isset()変数が設定されているかどうかを確認します。

<?php

echo isset($var); // false

$var = 'hello';

empty()変数が空かどうかをチェックします。

<?php

$emptyString = '';

echo empty($emptyString); // true

is_null()NULL空の文字列ではないように設定されているため、どちらが空とは異なるかをチェックしNULLます。(NULLは紛らわしい概念かもしれません)

タイトルが文字列なので使いたいと思いますempty()

if (!isset($_REQUEST[$name_input_name]) || empty($_REQUEST[$name_input_name])) {
    $file->error = 'Please Enter a Title';
    return false;
}
于 2012-09-11T18:41:25.383 に答える
11

PHP empty()vs is_null()vs isset()

   「」</th>  「foo」</th> ヌル FALSE    0 未定義
empty() TRUE FALSE TRUE TRUE TRUE TRUE
is_null() FALSE FALSE TRUE FALSE FALSE  (エラー)
isset() TRUE TRUE FALSE TRUE TRUE FALSE

未定義または未定義以外の値があるどうかを確認する場合は、を使用します未定義の変数に対して警告が生成されるため)。nullisset($var)
!is_null()

値が空白以外のテキストであるか、ゼロを含む任意の数値であるかを確認する場合は、注意が必要です。

if (!empty($v) || (isset($v) && ($v === 0 || $v === '0'))) {
    // $v is non-blank text, true, 0 or '0'
    // $v is NOT an empty string, null, false or undefined
}
于 2020-08-11T21:18:57.497 に答える
8

isset()

PHPマニュアルから– isset():

isset —変数が設定されていてNULLでないかどうかを判別します

つまり、変数がnullでない場合にのみtrueを返します。

空()

PHPマニュアルから– empty():

empty —変数が空かどうかを判別します

つまり、変数が空の文字列、false、array()、NULL、「0?」、0、および未設定の変数の場合はtrueを返します。

無効である()

PHPマニュアルから– is_null():

is_null —変数がNULLかどうかを検索します

つまり、変数がnullの場合にのみtrueを返します。は、未知の変数に適用できる1つの違いを除いて、is_null()の反対ですが、宣言された変数にのみ適用できます。isset()isset()is_null()

于 2015-11-24T15:54:40.183 に答える
5

何かに割り当てるisset に使用するつもりだったと思います。

if(!isset($_REQUEST[$name_input_name]))
{
    $file->error = 'Please Enter a Title';
    return false;
}

$caption = $_REQUEST[$name_input_name];
于 2012-09-11T18:36:28.577 に答える
4

isset()is_null()との違いを理解するのはそれほど簡単ではありませんempty()。それは私たちが信じたいよりも微妙です。

言葉で違いを明確に説明するのは簡単ではないので、このページをご覧になることをお勧めします。各関数の動作を含む詳細な表があります。違いを明確かつ完全に説明しています。

ちなみに、多くのPHPスクリプトには、動作の誤解によるセキュリティ違反が含まれていると私は確信しています。

于 2019-11-05T20:24:57.617 に答える
3

ここに非常に良い説明があります:

ここに画像の説明を入力してください

于 2019-11-06T05:50:49.830 に答える
1

strlenを使用して文字数をカウントします

 if (strlen($_REQUEST['name_input_name']) < 1) {
    $file->error = 'Please Enter a Title';
    return false;
}
于 2012-09-11T18:50:59.967 に答える
1

あなたはこれを試すことができます:

if(!isset($_REQUEST['name_input_name']))
{
    $file->error = 'Please Enter a Title';
    return false;
}
$caption = $_REQUEST['name_input_name'];

注:$ _ REQUESTは、データをkey=>valueペアで格納するグローバル配列です。サーバーから抽出された値として「name_input_name」を考慮してください。

name_input_nameが何らかの値に設定されている場合、コードはブロックされている場合はスキップし、値を変数$captionに格納します。

于 2016-02-19T07:45:05.967 に答える
1

私はこのphpページを書きました。うまくいけばあなたの助けになるでしょう。それを実行すると、これらの特定のタイプの変数とこれらの関数(および私が自分で作成したもの)との相互作用が示され、==演算子を使用してそれらを相互に比較します: https ://pastebin.com/whPFMams

<!doctype html>
<html>
<head>
    <style>
    td.first{
        font-weight: bold;
    }
    h3 {
        text-align: center;
    }
    </style>
</head>
<body>
    <h3>FUNCTIONS COMPARISON</h3><br>
<pre>
<h4>Variables</h4>
class obj{};
$n;

Array:
"a" => -1,
"b" => 0,
"c" => 0.0,
"d" => '',
"e" => ' ',
"f" => '0',
"g" => "\0",
"h" => true,
"i" => false,
"j" => null,
"k" => array(), 
"l" => new obj(),
"m" => new stdClass(),
"n" => $n (undefined)

z = (undeclared)

<h4>My function</h4>
function isvalid($value,$strict=false){
    if( !is_null($value) && value!==false && (!empty($value) || $value == 0) ){
        if($strict)
            {
                if(is_bool($value) || is_array($value) || is_object($value))
                    {return false;}
                else
                    {return true;}
            }
        else
            {return true;}
    }
    else
        {return false;}
}


<h4>Var_dump</h4>
<?php
error_reporting(E_ERROR | E_PARSE);

class obj{};

function isvalid($value,$strict=false){
    if( !is_null($value) && $value!==false && (!empty($value) || $value == 0) ){
        if($strict)
            {
                if(is_bool($value) || is_array($value) || is_object($value))
                    {return false;}
                else
                    {return true;}
            }
        else
            {return true;}
    }
    else
        {return false;}
}


$n;
$values = [
"a" => -1,
"b" => 0,
"c" => 0.0,
"d" => '',
"e" => ' ',
"f" => '0',
"g" => "\0",
"h" => true,
"i" => false,
"j" => null,
"k" => array(), 
"l" => new obj(),
"m" => new stdClass(),
"n" => $n
//"z"
];


echo var_dump($values)."\n z = "; echo var_dump($z)."\n";

?>
</pre><br />
<table border = "1">
         <tr>
            <th>== and other</th>
            <?php 
            echo "<th>"; echo var_dump($values["a"]); echo "<br> : a = -1 </th>";
            echo "<th>"; echo var_dump($values["b"]); echo "<br> : b = 0 </th>";
            echo "<th>"; echo var_dump($values["c"]); echo "<br> : c = 0.0 </th>";
            echo "<th>"; echo var_dump($values["d"]); echo "<br> : d = '' </th>";
            echo "<th>"; echo var_dump($values["e"]); echo "<br> : e = ' ' </th>";
            echo "<th>"; echo var_dump($values["f"]); echo "<br> : f = '0' </th>";
            echo "<th>"; echo var_dump($values["g"]); echo "<br> : g = '/0' </th>";
            echo "<th>"; echo var_dump($values["h"]); echo "<br> : h = true </th>";
            echo "<th>"; echo var_dump($values["i"]); echo "<br> : i = false </th>";
            echo "<th>"; echo var_dump($values["j"]); echo "<br> : j = null </th>";
            echo "<th>"; echo var_dump($values["k"]); echo "<br> : k = empty array </th>";
            echo "<th>"; echo var_dump($values["l"]); echo "<br> : l = empty object (Notices with numbers)</th>";
            echo "<th>"; echo var_dump($values["m"]); echo "<br> : m = empty stdClass (Notices with numbers)</th>";
            echo "<th>"; echo var_dump($values["n"]); echo "<br> : n = undefined </th>";
            echo "<th>"; echo var_dump($z); echo "<br> : z = undeclared (Notices)</th>"; 
            ?>
         </tr>
         <?php
         foreach ($values as $key => $val){
            echo '
            <tr>
            <td class="first">'; echo var_dump($val); echo '<br> : '.$key.'</td>';
            foreach ($values as $key2 => $val2){
                echo '<td>'; echo $val==$val2 ? var_dump($val==$val2) : /*var_dump($val==$val2).*/''; echo'</td>';
            }
            echo '<td>'; echo $val==$z ? var_dump($val==$z) : /*var_dump($val==$z).*/''; echo'</td>';
            echo '</tr>';
         }
         //z
         echo '
            <tr>
            <td class="first">'; echo var_dump($z); echo '<br> : z (Notices)</td>';
            foreach ($values as $key2 => $val2){
                echo '<td>'; echo $z==$val2 ? var_dump($z==$val2) : /*var_dump($z==$val2).*/''; echo'</td>';
            }
            echo '<td>'; echo $z==$z ? var_dump($z==$z) : /*var_dump($z==$z).*/''; echo'</td>';
            echo '</tr>';
            
          //!empty || ==0
         echo '
            <tr>
            <td class="first"> !empty || ==0 </td>';
            foreach ($values as $key => $val){
                echo '<td>'; echo !empty($val) || $val==0 ? var_dump(!empty($val) || $val==0) : /*var_dump(!empty($val) || $val==0.*/''; echo'</td>';
            }
            echo '<td>'; echo !empty($z) || $z==0 ? var_dump(!empty($z) || $z==0) : /*var_dump(!empty($z) || $z==0).*/''; echo'</td>';
            echo '</tr>';                            
         
         //isvalid
         echo '
            <tr>
            <td class="first"> isvalid() </td>';
            foreach ($values as $key => $val){
                echo '<td>'; echo isvalid($val) ? var_dump(isvalid($val)) : /*var_dump(isvalid($val)).*/''; echo'</td>';
            }
            echo '<td>'; echo isvalid($z) ? var_dump(isvalid($z)) : /*var_dump(isvalid($z)).*/''; echo'</td>';
            echo '</tr>';  
            
         //isvalid strict
         echo '
            <tr>
            <td class="first"> isvalid(strict) </td>';
            foreach ($values as $key => $val){
                echo '<td>'; echo isvalid($val,true) ? var_dump(isvalid($val,true)) : /*var_dump(isvalid($val,true)).*/''; echo'</td>';
            }
            echo '<td>'; echo isvalid($z,true) ? var_dump(isvalid($z,true)) : /*var_dump(isvalid($z,true)).*/''; echo'</td>';
            echo '</tr>'; 
            
         //!is_null
         echo '
            <tr>
            <td class="first"> !is_null </td>';
            foreach ($values as $key => $val){
                echo '<td>'; echo !is_null($val) ? var_dump(!is_null($val)) : /*var_dump(!is_null($val)).*/''; echo'</td>';
            }
            echo '<td>'; echo !is_null($z) ? var_dump(!is_null($z)) : /*var_dump(!is_null($z)).*/''; echo'</td>';
            echo '</tr>';     
            
         //isset
         echo '
            <tr>
            <td class="first"> isset (No Notices)</td>';
            foreach ($values as $key => $val){
                echo '<td>'; echo isset($val) ? var_dump(isset($val)) : /*var_dump(isset($val)).*/''; echo'</td>';
            }
            echo '<td>'; echo isset($z) ? var_dump(isset($z)) : /*var_dump(isset($z)).*/''; echo'</td>';
            echo '</tr>';  
            
         //!empty
         echo '
            <tr>
            <td class="first"> !empty (No Notices) </td>';
            foreach ($values as $key => $val){
                echo '<td>'; echo !empty($val) ? var_dump(!empty($val)) : /*var_dump(!empty($val)).*/''; echo'</td>';
            }
            echo '<td>'; echo !empty($z) ? var_dump(!empty($z)) : /*var_dump(!empty($z)).*/''; echo'</td>';
            echo '</tr>';   
            
         // if
         echo '
            <tr>
            <td class="first"> if </td>';
            foreach ($values as $key => $val){
                echo '<td>'; echo $val ? var_dump(true) : /*var_dump(false).*/''; echo'</td>';
            }
            echo '<td>'; echo $z ? var_dump(true) : /*var_dump(false).*/''; echo'</td>';
            echo '</tr>';      
            
         ?>
         <tr>
            <th>functions</th>
            <?php 
            echo "<th>"; echo var_dump($values["a"]); echo "<br> : a = -1 </th>";
            echo "<th>"; echo var_dump($values["b"]); echo "<br> : b = 0 </th>";
            echo "<th>"; echo var_dump($values["c"]); echo "<br> : c = 0.0 </th>";
            echo "<th>"; echo var_dump($values["d"]); echo "<br> : d = '' </th>";
            echo "<th>"; echo var_dump($values["e"]); echo "<br> : e = ' ' </th>";
            echo "<th>"; echo var_dump($values["f"]); echo "<br> : f = '0' </th>";
            echo "<th>"; echo var_dump($values["g"]); echo "<br> : g = '/0' </th>";
            echo "<th>"; echo var_dump($values["h"]); echo "<br> : h = true </th>";
            echo "<th>"; echo var_dump($values["i"]); echo "<br> : i = false </th>";
            echo "<th>"; echo var_dump($values["j"]); echo "<br> : j = null </th>";
            echo "<th>"; echo var_dump($values["k"]); echo "<br> : k = empty array </th>";
            echo "<th>"; echo var_dump($values["l"]); echo "<br> : l = empty object (Notices with numbers)</th>";
            echo "<th>"; echo var_dump($values["m"]); echo "<br> : m = empty stdClass (Notices with numbers)</th>";
            echo "<th>"; echo var_dump($values["n"]); echo "<br> : n = undefined </th>";
            echo "<th>"; echo var_dump($z); echo "<br> : z = undeclared (Notices)</th>"; 
            ?>
         </tr>
      </table>
    <br>
    (Notices) : This line is full of Notices. <br>
    (Notices with numbers) : This line has Notices about number types interactions. <br>
    (No Notices) : This line has absolutely no Notices.
</body>
</html>
于 2020-07-20T10:19:05.107 に答える
0

is_nullは、変数がnullの場合にissetが通知を出力しないことを除いて、issetのデュアルです。

>$ciao;
>var_export(is_null($ciao));
>PHP Notice:  Undefined variable: ciao in php shell code on line 1
>true
>var_export(!isset($ciao));
>true
于 2016-03-03T14:31:24.947 に答える
0

これを参照してください:PHPではisset、is_null、emptyの間で異なります

  • isset()は、$ varが定義されており、nullではないことを意味します
  • is_null()は、$ varが定義され、nullであることを意味します。未定義の場合はエラーをスローします。
  • empty()は、NO => false、0、0.0、 ""、 "0"、null、array()を意味します。
于 2020-06-17T10:24:05.927 に答える
-1
  1. isset()—変数が設定されているかどうかを判別します。NULLではありません

  2. empty()-変数が空かどうかを判別します。

  3. is_null()-変数がnullかどうかを判別します

于 2015-09-06T09:05:17.480 に答える
-2

これらのphp関数empty(),isset() & is_nullでは、主に変数をテストするために使用されますが、各関数には異なる機能主義者がいます。

クレジット:empty()、isset()、is_null()

于 2014-10-20T14:13:05.297 に答える