列出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";
}
函数count
是否有可能访问班级private
中的$count
字段myCounter
,以及如何?
答案 0 :(得分:5)
PHP count
函数未访问私有$count
。实际发生的是:
count
调用$counter
(PHP函数)
$counter
是否为数组,而不是。它会检查$counter
是否实现了接口Countable
。$counter
确实实现了接口Countable
,所以它有一个公共方法count
(与PHP函数分开)。$counter->count()
,然后返回其结果。如您所见,没有提及私人$count
。 public count
方法可以执行常规类方法所能做的任何事情 - 包括访问实例的私有变量。考虑一下:
class myCounter implements Countable {
public function count(){
return 42;
}
}
$counter = new myCounter;
echo "I have " . count($counter) . " items.";
哪会导致:
I have 42 items.
答案 1 :(得分:2)
php函数count(arg)
接受数组或Countable对象作为参数。 Countable是实现Countable接口的Class的实例:它意味着它必须具有返回整数的count
方法。你是如何实现它的,它取决于你。您可以使用示例中的变量来保持计数,或者您可以返回随机数或任何您想要的数字。所以为了回答你的问题,没有count()函数不访问私有字段$ count,但是它调用了类实现的count方法。
答案 2 :(得分:1)
这只是一个基本的例子,它只是在每次运行计数时递增一个变量。您可以轻松地将其与以下内容进行交换:
class Repository implements Countable {
private $data = [];
public function count() {
return count($this->data);
}
}
这是包含$data
属性中记录的存储库的另一个示例。使用count($instanceOfRepository)
将返回$data
的计数。
答案 3 :(得分:1)
count
功能无法访问您班级中的private
字段$count
。它会调用public
界面中描述的count
方法Countable
。
这个特殊的例子有点奇怪,因为它实际上计算了调用count
函数的次数,它可能会使读者感到困惑。