Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用计数对可数对象进行计数_Php - Fatal编程技术网

Php 使用计数对可数对象进行计数

Php 使用计数对可数对象进行计数,php,Php,列出PHP文档中的链接,第一个示例是如何工作的 <?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 coun

列出PHP文档中的链接,第一个示例是如何工作的

<?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时都会增加一个变量。您可以很容易地用以下内容将其替换掉:

class Repository implements Countable {
    private $data = [];
    public function count() {
        return count($this->data);
    }
}

这是另一个存储库示例,其中包含
$data
属性中的记录。使用
count($instanceOfRepository)
将返回
$data

count
函数不会访问类中的
private
字段
$count
。它调用
Countable
接口中描述的
public
方法
count


这个特定的例子有点奇怪,因为它实际上计算了调用
count
函数的次数,这可能会让读者感到困惑。

PHP
count
函数没有访问私有
$count
。实际发生的情况是:

  • count
    (PHP函数)使用参数
    $counter
  • 该函数测试
    $counter
    是否为数组,而不是数组。它检查
    $counter
    是否实现了接口
    Countable
  • 因为
    $counter
    实现了接口
    Countable
    ,所以它有一个公共方法
    count
    (与PHP函数分离)
  • 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.
    

    php函数
    count(arg)
    接受数组或可数对象作为参数。Countable是实现Countable接口的类的实例:这意味着它必须有一个返回整数的
    count
    方法。如何实施,取决于你自己。您可以使用示例中的变量保持计数,也可以返回随机数,或者任何您想要的。为了回答您的问题,count()函数不访问私有字段$count,但它调用类实现的count方法

    count()
    函数返回次数。所以不完全是这样。当你说“函数<代码>计数
    ”时,你能澄清你指的是哪个函数吗?你是指
    myCounter
    中包含的函数,还是指?一个有权访问
    $count
    ,另一个没有。该方法是在对实现可数的对象使用
    count()
    函数时执行的。我想您想在自己的链接中执行
    $counter->count()
    ,对吧:“在实现可数的对象上使用count()函数时执行此方法。”。您只需调用
    $counter->count()