PHP_PHP チュートリアルでオブジェクトを配列として使用する
我们了解,JAVASCRIPT中,对象的属性、方法,是可以用数组的模式来访问的。但通常情况下是不可能的。
为什么要这么做?这是因为,通过这一方式,可以更加方便地操作对象,我们可以定义一个类。而不是定义一个Key Value数组。自然,如果我们还有其它的办法,一种最简单的,就是强制转换成数组。但,这样会失去对象中原有的方法。
不过,SPL中的ArrayObject可以帮助我们用数组模式访问属性。但方法仍不能实现。
ArrayObject类结构如下(部分方法是在php5,1或php5.2时才加上的):
Php代码
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 )
}
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呢? 主要是上面的方法中的三个方法:
offsetGet 支持$obj[name] 读的方式
offsetSet 支持$obj[name] 写的方式
但foreach则是该类对ArrayAccess的函数Current等的默认实现。
看一个例子代码:
PHP コード
class test extends ArrayObject{
public $name;
private $age = 21;
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], ;// メソッドにアクセスできるかどうかを確認する:
print_r($ obj); //出力オブジェクト$ obj->
print_r($arr);
//$arr->show(); この行は元のメソッドがすべて失われるため、エラーが発生します。
$obj1=new test1(); //通常のオブジェクトを作成します
$arr1=(array)$obj1; //配列への強制変換。
print_r($arr1); //プライバシーは完全に公開されます
クラス test extends ArrayObject{
public $name;
private $age = 21;
public function show(){
print_r(get_object_vars($this));
}
}
class test1{
private $age = 21;
public function show(){
print_r(get_object_vars($this));
}
}
$obj=new test();
//配列メソッドを使用して属性を読み書きします
$obj[ name] =hello;
$obj[nick]=mockArray;
echo $obj[nick], ;
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); //プライバシーは完全に公開されます
このコードは次のように出力します:
mockArrayNULL
テストオブジェクト
(
[name] =>hello
[nick] =>mockArray
)
(
[name] =>hello [nick] =>mockArray
)
配列
(
[名前] => こんにちは
[ニック] => モック配列
)
配列
(
[名前] =>
[test1 年齢] => 21
)
配列モードを使用してプロパティにアクセスできることがわかりますが、メソッド (メンバー関数) にはアクセスできません。
強制変換後は配列オブジェクトとなり、メンバー関数はありません。
E もちろん、Officetgets OFFSETSET の 2 つのメソッドは、必要に応じてさらに書き直すこともできます。なぜ?非常に異常なニーズがあれば、間違いなく役立つからです。たとえば、参照を使用して 3 つの配列をオブジェクトにラップし、配列としてアクセスしたいとします。このとき、この2つの関数を書き換える必要があります。もちろん、ArrayAccess インターフェイスの対応する関数も書き直す必要があります。
访 パブリック属性にどのようにアクセスできるかは関係ありません。プライベートの場合はアクセスできません。無理やり配列にしても同じです。ただし、ArrayObject を継承しない場合は異なります。このようなクラスを強制的に配列に変換すると、そのプライバシー (プライベート属性) が暴露されてしまいます。
ただし、プライベート属性が配列に変換された後は、元の属性名が保持されていないことがわかります。代わりに、特定の印刷不可能な文字 + クラス名 + 印刷不可能な文字 + 属性名という形式が使用されます。この印刷不可能な文字の ASCII 値はチェックされていません。興味がある場合は、チェックしてください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。
