Heim >Backend-Entwicklung >PHP-Tutorial >1ArrayAccess(数组式访问)接口

1ArrayAccess(数组式访问)接口

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-07-29 08:58:051034Durchsuche

如果想让对象使用起来像一个PHP数组,那么我们需要实现ArrayAccess接口。

ArrayAccess是一个interface,实现这个interface,必须要实现以下几个方法:
1ArrayAccess(数组式访问)接口

<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>
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了1ArrayAccess(数组式访问)接口,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn