如果想让对象使用起来像一个PHP数组,那么我们需要实现ArrayAccess接口。
ArrayAccess是一个interface,实现这个interface,必须要实现以下几个方法:
<code><span><span>interface</span><span>ArrayAccess</span> {</span><span>//标示一个元素是否定义</span><span>public</span><span><span>function</span><span>offsetExists</span><span>(<span>$offset</span>)</span>;</span><span>//返回一个元素值</span><span>public</span><span><span>function</span><span>offsetGet</span><span>(<span>$offset</span>)</span>;</span><span>//为一个元素赋值</span><span>public</span><span><span>function</span><span>offsetSet</span><span>(<span>$offset</span>,<span>$value</span>)</span>;</span><span>//删除一个元素值</span><span>public</span><span><span>function</span><span>offsetUnset</span><span>(<span>$offset</span>)</span>;</span> }</code>
实现:
<code><span><span>class</span><span>Test</span><span>implements</span><span>ArrayAccess</span> {</span><span>private</span><span>$elements</span> = <span>array</span>(); <span>//标示一个元素是否定义</span><span>public</span><span><span>function</span><span>offsetExists</span><span>(<span>$offset</span>)</span> {</span><span>return</span><span>isset</span>(<span>$this</span>->elements[<span>$offset</span>]); } <span>//返回一个元素值</span><span>public</span><span><span>function</span><span>offsetGet</span><span>(<span>$offset</span>)</span> {</span><span>return</span><span>$this</span>->elements[<span>$offset</span>]; } <span>//为一个元素赋值</span><span>public</span><span><span>function</span><span>offsetSet</span><span>(<span>$offset</span>,<span>$value</span>)</span> {</span><span>$this</span>->elements[<span>$offset</span>] = <span>$value</span>; } <span>//删除一个元素值</span><span>public</span><span><span>function</span><span>offsetUnset</span><span>(<span>$offset</span>)</span> {</span><span>unset</span>(<span>$this</span>->elements[<span>$offset</span>]); } } <span>$test</span> = <span>new</span> Test(); <span>$test</span>[<span>'test'</span>] = <span>'test'</span>;<span>//自动调用offsetSet</span><span>if</span>(<span>isset</span>(<span>$test</span>[<span>'test'</span>]))<span>//自动调用offsetExists</span> { <span>echo</span><span>$test</span>[<span>'test'</span>];<span>//自动调用offsetGet</span><span>echo</span><span>'<br>'</span>; <span>unset</span>(<span>$test</span>[<span>'test'</span>]);<span>//自动调用offsetUnset</span> var_dump(<span>$test</span>[<span>'test'</span>]); }</code>
<code><span><span>class</span><span>obj</span><span>implements</span><span>ArrayAccess</span> {</span><span>private</span><span>$container</span> = <span>array</span>(); <span>public</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>$this</span>->container = <span>array</span>( <span>'one'</span> => <span>1</span>, <span>'tow'</span> => <span>2</span>, <span>'three'</span> => <span>3</span>, ); } <span>public</span><span><span>function</span><span>offsetGet</span><span>(<span>$offset</span>)</span> {</span><span>return</span><span>isset</span>(<span>$this</span>->container[<span>$offset</span>]) ? <span>$this</span>->container[<span>$offset</span>] : <span>null</span>; } <span>public</span><span><span>function</span><span>offsetSet</span><span>(<span>$offset</span>,<span>$value</span>)</span> {</span><span>if</span> (is_null(<span>$offset</span>)){ <span>$this</span>->container = <span>$value</span>; }<span>else</span>{ <span>$this</span>->container[<span>$offset</span>] = <span>$value</span>; } } <span>public</span><span><span>function</span><span>offsetExists</span><span>(<span>$offset</span>)</span> {</span><span>return</span><span>isset</span>(<span>$this</span>->container[<span>$offset</span>]); } <span>public</span><span><span>function</span><span>offsetUnset</span><span>(<span>$offset</span>)</span> {</span><span>unset</span>(<span>$this</span>->container[<span>$offset</span>]); } } <span>$obj</span> = <span>new</span> obj; var_dump(<span>isset</span>(<span>$obj</span>[<span>"two"</span>])); <span>// 调用 offsetExists</span> var_dump(<span>$obj</span>[<span>"two"</span>]); <span>//调用 offsetGet</span><span>unset</span>(<span>$obj</span>[<span>"two"</span>]); <span>//调用 offsetUnset</span> var_dump(<span>isset</span>(<span>$obj</span>[<span>"two"</span>]));<span>// 调用 offsetExists</span><span>$obj</span>[<span>"two"</span>] = <span>"A value"</span>; <span>// 调用 offsetSet</span> var_dump(<span>$obj</span>[<span>"two"</span>]); <span>//调用 offsetGet</span><span>$obj</span>[] = <span>'Append 1'</span>; <span>$obj</span>[] = <span>'Append 2'</span>; <span>$obj</span>[] = <span>'Append 3'</span>; print_r(<span>$obj</span>); </code>
以上就介绍了1ArrayAccess(数组式访问)接口,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。