ホームページ バックエンド開発 PHPチュートリアル PHP でオブジェクトを配列として使用する

PHP でオブジェクトを配列として使用する

Jun 13, 2016 pm 01:07 PM
array name obj void

PHP でオブジェクトを配列として使用する

??????? JAVASCRIPT では、配列モードを使用してオブジェクトのプロパティとメソッドにアクセスできることを理解しています。しかし通常、これは不可能です。

??????なぜこんなことをするのですか?このようにすることで、オブジェクトをより便利に操作できるようになり、クラスを定義できるからです。 Key Value 配列を定義する代わりに。もちろん、他の方法がある場合、最も簡単な方法は強制的に配列に変換することです。ただし、これにより、オブジェクト内の元のメソッドが失われます。

????????? ただし、SPL の ArrayObject は、配列モードを使用してプロパティにアクセスするのに役立ちます。しかし、この方法はまだ実装できません。

?????? ArrayObject クラスの構造は次のとおりです (一部のメソッドは php5,1 または php5.2 で追加されました)。

ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable {
/* 常量 */
const integer STD_PROP_LIST = 1 ;
const integer ARRAY_AS_PROPS = 2 ;
/* 方法 */
__construct ([ mixed $input [, int $flags [, string $iterator_class ]]] )
void append ( mixed $value )
void asort ( void )
int count ( void )
array exchangeArray ( mixed $input )
array getArrayCopy ( void )
int getFlags ( void )
ArrayIterator getIterator ( void )
int getIteratorClass ( void )
void ksort ( void )
void natcasesort ( void )
void natsort ( void )
bool offsetExists ( mixed $index )
mixed offsetGet ( mixed $index )
void offsetSet ( mixed $index , mixed $newval )
void offsetUnset ( mixed $index )
public void serialize ( void )
void setFlags ( int $flags )
void setIteratorClass ( string $iterator_class )
void uasort ( callback $cmp_function )
void uksort ( callback $cmp_function )
public void unserialize ( string $serialized )
}
ログイン後にコピー
?

??????? その中には、なぜ $obj['name'] を使用して $obj->name に直接アクセスできるのでしょうか? 上記の方法のうち主に 3 つ:

??????? offsetGet は $obj['name'] 読み取りメソッドをサポートしています

??????? offsetSet は $obj['name'] 書き込みメソッドをサポートします

??????? ただし、foreach は ArrayAccess の関数 Current などのデフォルトの実装です。

??????? コード例を見てください:

	class test extends ArrayObject{
		public $name;
		private $age = 21;
		public function show(){
			print_r(get_object_vars($this));
		}
	}
	class test1{
		public $name;
		private $age = 21;
		public function show(){
			print_r(get_object_vars($this));
		}
	}
	$obj=new test();
	//使用数组方式读写属性
	$obj['name']='hello';
	$obj['nick']='mockArray';
	echo $obj['nick'], '</br>';	
	var_dump($obj['show']);//检测是否可以访问方法:	
	print_r($obj);//输出对象	
	$obj->show();//调用方法
	$arr=(array)$obj; //强制转换成数组。	
	print_r($arr);
	//$arr->show(); 此行将出错,因为,原有方法全部丢失。
	$obj1=new test1(); //创建普通对象
	$arr1=(array)$obj1; //强制转换成数组。
	print_r($arr1); //隐私完全暴光
ログイン後にコピー
?

????????? このコードは次のように出力します:

mockArray
NULL

テスト オブジェクト
(
??? [名前] => hello
??? [ニックネーム] => モック配列
)
配列
(
??? [名前] =>hello
??? [ニックネーム] =>mockArray
)
配列
(
??? [名前] => こんにちは
??? [ニック] => モック配列
)
配列
(
??? [名前] =>
??? [test1 年齢] => 21
)

???????????? 配列モードを使用してプロパティにアクセスできるが、メソッド (メンバー関数) にはアクセスできないことがわかります。

???????????? 強制変換後は配列オブジェクトとなり、メンバー関数はありません。

??????? もちろん、これら 2 つのメソッド offsetGet?offsetSet も必要に応じて書き換えることができます。なぜ?非常に異常なニーズがあれば、間違いなく役立つからです。たとえば、参照を使用して 3 つの配列をオブジェクトにラップし、配列としてアクセスしたいとします。このとき、この2つの関数を書き換える必要があります。もちろん、ArrayAccess インターフェイスの対応する関数も書き直す必要があります。

????????? また、アクセスできる属性はすべてパブリック プロパティです。プライベートの場合はアクセスできません。無理やり配列にしても同じです。ただし、ArrayObject を継承しない場合は異なります。このようなクラスが強制的に配列に変換されると、そのプライバシー (プライベート属性) が暴露されてしまいます。

????????? ただし、プライベート属性が配列に変換された後、元の属性名が保持されていないことがわかります。代わりに、特定の印刷不可能な文字 + クラス名 + 印刷不可能な文字 + 属性名という形式が使用されます。この印刷不可能な文字の ASCII 値はチェックされていません。興味がある場合は、チェックしてください。

?

?

?

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaでvoidは何を意味しますか Javaでvoidは何を意味しますか Mar 01, 2023 pm 07:19 PM

Java では void は「空」、つまり「何も返さない」という意味で、メソッドを宣言した時点では戻り値がないことを意味します。 void は、ラッパー クラス "java.lang.Void" に対応します。Void クラスは、final で変更され、Java キーワード void を表す Class オブジェクトへの参照を保存するために使用されるインスタンス化不可能なプレースホルダー クラスです。

PHP で void 型の戻り値を使用する意義は何ですか? PHP で void 型の戻り値を使用する意義は何ですか? Apr 10, 2024 pm 09:21 PM

PHP では、void 型の戻り値は関数が値を返さないことを意味し、通常は戻り値を必要としないレコードの更新などの操作に使用されます。 void 関数を宣言する場合は void キーワードを使用します。void 関数を呼び出す場合、結果を変数に代入してはなりません。実際のケース: void 型の戻り値を使用すると、情報を返さずにデータベース レコードを更新できます。

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

「javascript:void(O)」の問題を理解して解決する方法 「javascript:void(O)」の問題を理解して解決する方法 Feb 19, 2024 pm 05:35 PM

javascript:void(0) とはどういう意味ですか?この問題に対する解決策は何でしょうか? Web を閲覧していると、クリックしても反応せず、ブラウザのアドレス バーに「javascript:void(0)」と表示されるリンクに遭遇することがあります。この質問は、文字通り JavaScript コードのように見えるエラー メッセージが何を意味するのか分からず、一部の Web 訪問者を混乱させる可能性があります。それでは、一緒に開梱してみましょう

C言語におけるvoidキーワードの機能 C言語におけるvoidキーワードの機能 Feb 19, 2024 pm 11:33 PM

C の void は、空の型、つまり特定の型を持たないデータを表すために使用される特別なキーワードです。 C言語ではvoidは主に以下の3つの場面で使われます。関数の戻り値の型は void です。C 言語では、関数は int、float、char などのさまざまな戻り値の型を持つことができます。ただし、関数が値を返さない場合は、戻り値の型を void に設定できます。これは、関数が実行された後、特定の値を返さないことを意味します。例: voidhelloWorld()

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 Jun 26, 2023 pm 01:41 PM

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

See all articles