Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Zend Framework2_Abstract Class_Factory Pattern - Fatal编程技术网

了解php工厂设计模式

了解php工厂设计模式,php,oop,zend-framework2,abstract-class,factory-pattern,Php,Oop,Zend Framework2,Abstract Class,Factory Pattern,我对php中的OOPS有点困惑。我试图理解php中的set-get方法。 这里是我正在寻找的简单zend框架模块 https://github.com/blanchonvincent/SimplePageCrawler public function getHeadingTags() { if(null === $this->headingTags) { $this->setHeadingTags(new ArrayObject()); // here ca

我对php中的OOPS有点困惑。我试图理解php中的set-get方法。 这里是我正在寻找的简单zend框架模块

https://github.com/blanchonvincent/SimplePageCrawler

public function getHeadingTags()
{
    if(null === $this->headingTags) {
        $this->setHeadingTags(new ArrayObject()); // here called but empty array passed
    }
    return $this->headingTags;
}

public function setHeadingTags($headingTags)
{
    if(is_array($headingTags)) {
        $this->getHeadingTags()->exchangeArray($headingTags);
        return $this;
    }
    if(!$headingTags instanceof ArrayObject) {
        throw new Exception\InvalidArgumentException('Heading tags must be an array or an ArrayObject');
    }
    $this->headingTags = $headingTags;
    return $this;
}
$crawler = $this->getServiceLocator()->get('SimplePageCrawler');
$page = $crawler->get('http://cnn.com');
print_r($page->getHeadingTags()); // this method return results very well
但我试图理解,它如何在不调用setHeadingTags方法的情况下返回结果。可能是它叫自动

请帮助我理解。它叫什么名字
谢谢

setHeadingTags
纯粹是response类上的一个setter。在getter中,如果数组对象为空,则它会在其中放置一个
ArrayObject
。这使开发人员可以选择使用setter将项目放置在标题中,如果愿意,则在调用
getHeadingTags
时为您填充

您的问题的答案是:它不会被自动调用,或者永远不会被调用,除非它尝试获取标记,此时它被检查为null,如果是,则填充空对象,然后返回空对象。例如,如果您希望添加特定的头标记,那么您可以使用所需的值从代码中调用它,此时getter会注意到它不是null并返回头标记