使用count计数可数对象

Mum*_*sin 0 php

列出PHP文档Countable :: count的链接,第一个例子是如何工作的?

<?php
class myCounter implements Countable {
    private $count = 0;
    public function count() {
        return ++$this->count;
    }
}

$counter = new myCounter;

for($i=0; $i<10; ++$i) {
    echo "I have been count()ed " . count($counter) . " times\n";
}
Run Code Online (Sandbox Code Playgroud)

函数是否可以count访问类中的private字段,以及如何?$countmyCounter

Aur*_*ílý 5

PHP count函数不访问私有$count.实际发生的是这个:

  1. count (PHP函数)用参数调用 $counter
  2. 该函数测试if $counter是否为数组,而不是.它检查是否$counter实现了接口Countable.
  3. 因为$counter实现了接口Countable,所以它有一个公共方法count(与PHP函数分开).
  4. PHP调用$counter->count(),然后返回其结果.

如你所见,没有提到私人$count.public count方法可以执行常规类方法所能做的任何事情 - 包括访问实例的私有变量.考虑一下:

class myCounter implements Countable {
    public function count(){
        return 42;
    }
}

$counter = new myCounter;
echo "I have " . count($counter) . " items.";
Run Code Online (Sandbox Code Playgroud)

这将导致:

I have 42 items.
Run Code Online (Sandbox Code Playgroud)