ホームページ >バックエンド開発 >PHPの問題 >PHPで配列かオブジェクトかを判断する方法

PHPで配列かオブジェクトかを判断する方法

藏色散人
藏色散人オリジナル
2021-06-21 10:25:485371ブラウズ

php メソッドで配列かオブジェクトかを判断: 1. 変数の型と変数の長さ属性で判断; 2. toString メソッドを使用してオブジェクトを他の型に変換string; 3.instanceof;で判定する 4.isArrayを使って判定する、など。

PHPで配列かオブジェクトかを判断する方法

この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、Dell G3 コンピューター。

PHP は配列かオブジェクトかをどのように判断するのでしょうか?変数が配列であるかオブジェクトであるかを判断する方法

方法 1: 変数の型と変数の長さ属性を判断することによって (1 つの例外として、引数オブジェクト - 引数オブジェクトが存在する場合にデータが格納される場所)パラメータを関数に渡す)

      var arr=[2,3,4];
      var obj={"name":"maomao","age":20};
      console.log(typeof arr);   //object
      console.log(typeof obj);   //object
      console.log(arr.length);   //3
      console.log(obj.length);   //undefined
      console.log(obj.name);     //maomao
      //这里说明在对象中并没有length属性,所以是未定义。

メソッド 2:

toString メソッドを使用して、オブジェクトを他のタイプの文字列に変換します。この例は、引数オブジェクトが配列ではないことをよく証明していますが、オブジェクト

  var arr=[2,3,4];
        var obj={"name":"maomao","age":20};
        // console.log(arr.toString());  //'2,3,4'
        // console.log(obj.toString());  //[object Object]
        function sum(a,b){
           // console.log(arguments);
           // console.log(typeof arguments);    //object
           // console.log(arguments.length);    //2 根据具体调用函数传的实参决定
           // console.log(arguments.toString()); //[object Arguments]
           return a+b;
        }
        alert(sum(3,4));

方法 3: —>実現不可能

instanceof は、オブジェクトが特定のクラスのインスタンスであるかどうかを示します。

結論: オブジェクト A が別のオブジェクト B のインスタンスであるかどうかを検出する instanceof の原理は、オブジェクト B のプロトタイプが指すオブジェクトがオブジェクトの [[prototype]] チェーン上にあるかどうかを確認することです。 A.存在する場合は true を返し、そうでない場合は false を返します。ただし、特殊なケースがあり、オブジェクト B のプロトタイプが null の場合、エラーが報告されます (null ポインター例外と同様)。

    var arr=[2,3,4,"haa"];
        var obj={"name":"maomao","age":20};
        console.log(arr instanceof Array);  //true
        console.log(obj instanceof Object);  //true
        console.log(arr instanceof Object);  //true
        ---这里跟网上的不同,不知道是什么原因
        console.log(obj instanceof Array);  //false

4. ECMAScript 5 では、isArray を使用して

        var arr=[2,3,4,"haa"];
        var obj={"name":"maomao","age":20};
        console.log(Array.isArray(arr));  //true
        console.log(Array.isArray(obj));  //false
        //注意没有isObject这种方法   暂时

5. isPrototypeOf() 関数を使用します

原則: オブジェクトが配列のプロトタイプであるかどうかを検出します(または、プロトタイプ チェーンでは、直接の親オブジェクトだけでなく、プロトタイプ チェーン全体のすべての親オブジェクトも検出できます)

使用方法:parent.isPrototypeOf(child) を使用して、次のことを検出します。親は子のプロトタイプです;

isPrototypeOf() 関数によって実装される関数は instancof 演算子と非常に似ていることに注意してください;

  var arr=[2,3,4,"haa"];
    var object={"name":"maomao","age":20};
    console.log(Array.prototype.isPrototypeOf(arr));    //true
    console.log(Array.prototype.isPrototypeOf(object)); //false
    console.log(Object.prototype.isPrototypeOf(arr));   //true                   console.log(Object.prototype.isPrototypeOf(object));  //true
   //从上面上看Array.prototype.isPrototypeOf()可以作为判断的依据

6. コンストラクター属性を使用します

var arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(arr.constructor);  //function Array() { [native code] }
console.log(obj.constructor);  //function Object() { [native code] }
console.log(arr.constructor==Array);   //true
console.log(arr.constructor==Object);  //false
console.log(obj.constructor==Array);   //false
console.log(obj.constructor==Object);  //true

7. concat メソッドを使用します – 柔軟

array.concat(array1,array2,…)

2 つ以上の配列を組み合わせた新しい配列を返します

var arr=[2,3,4];
var obj={"name":"maomao","age":20,'concat':function(){ return 1;}};
console.log(arr.concat());  //[2,3,4]
console.log(obj.concat());  //1 当然这个concat是我自定义上去的方法,返回值也是可以定制的。如果没有该方法则会报出Uncaught TypeError: obj.concat is not a function这个错误。

推奨学習: 「PHP ビデオ チュートリアル

以上がPHPで配列かオブジェクトかを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。