在PHP中把对象当数组运用
在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呢? 主要是上面的方法中的三个方法:
??????? 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); //隐私完全暴光
?
???????? 这段代码会输出:
mockArrayNULL
test Object
(
??? [name] => hello
??? [nick] => mockArray
)
Array
(
??? [name] => hello
??? [nick] => mockArray
)
Array
(
??? [name] => hello
??? [nick] => mockArray
)
Array
(
??? [name] =>
??? [ test1 age] => 21
)
???????? 可以看出,完全可以使用数组模式访问属性,但不能访问到方法(成员函数)。
???????? 强制转换后,即是数组对象,再无成员函数了。
???????? 当然 offsetGet? offsetSet 这两个方法,也可以根据我们的需要进一步改写。为什么?因为,如果有一些十分变态的需求之时,肯定有用。比如,我们要将三个数组用引用的方式包装到一个对象中,当成一个数组来访问。这时,就要重写这两个函数。当然,同时也要重写ArrayAccess接口中对应的函数。
???????? 再有,能够访问到的均是公有属性。如果是私有的,则访问不到的。即便是强制转换成数组,也是一样。但如果没有继承ArrayObject,则就不同了。这样的类,一旦强制转换成数组,其隐私(私有的属性)也就被暴光了。
???????? 不过我们可以看出,私有属性转换成数组以后,未保留原有属性名。而是使用了:某个不可打印字符+类名+不可打印字符+属性名的形式。这个不可打印字符ASCII是多少没有查,你要有兴趣可以查一下!
?
?
?

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



In Java, void means "empty", that is, "returns nothing". When the method is declared, it means that the method has no return value. void corresponds to a wrapper class "java.lang.Void". The Void class is modified with final and is a non-instantiable placeholder class used to save a reference to the Class object that represents the Java keyword void.

In PHP, the void type return value means that the function does not return any value, and is usually used for operations such as updating records that do not require a return value. Use the void keyword when declaring a void function; when calling a void function, the result must not be assigned to a variable. Practical case: void type return value can be used to update database records without returning any information.

Title: Example of using the Array.Sort function to sort an array in C# Text: In C#, array is a commonly used data structure, and it is often necessary to sort the array. C# provides the Array class, which has the Sort method to conveniently sort arrays. This article will demonstrate how to use the Array.Sort function in C# to sort an array and provide specific code examples. First, we need to understand the basic usage of the Array.Sort function. Array.So

void in C is a special keyword used to represent an empty type, which means data without a specific type. In C language, void is usually used in the following three aspects. The function return type is void. In C language, functions can have different return types, such as int, float, char, etc. However, if the function does not return any value, the return type can be set to void. This means that after the function is executed, it does not return a specific value. For example: voidhelloWorld()

What does javascript:void(0) mean? What are the solutions to this problem? When we browse the web, sometimes we encounter some links that do not respond after clicking, but are displayed as "javascript:void(0)" in the browser's address bar. This question may confuse some web visitors as they don't know what the error message, which literally looks like JavaScript code, means. So, let's unpack this together

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

When programming in PHP, we often need to merge arrays. PHP provides the array_merge() function to complete array merging, but when the same key exists in the array, this function will overwrite the original value. In order to solve this problem, PHP also provides an array_merge_recursive() function in the language, which can merge arrays and retain the values of the same keys, making the program design more flexible. array_merge

In PHP, there are many powerful array functions that can make array operations more convenient and faster. When we need to combine two arrays into an associative array, we can use PHP's array_combine function to achieve this operation. This function is actually used to combine the keys of one array as the values of another array into a new associative array. Next, we will explain how to use the array_combine function in PHP to combine two arrays into an associative array. Learn about array_comb
