我是faker的新手,也是PHP的新手。我的问题是关于PHP如何工作。对于我的问题,我以Faker(一个生成伪数据的PHP库)为例。作为参考,网址是:
https://github.com/fzaninotto/Faker#faker-internals-understanding-providers
我正在阅读faker内部文档,并看到了这段代码:
<?php
namespace Faker\Provider;
class Book extends \Faker\Provider\Base
{
public function title($nbWords = 5)
{
$sentence = $this->generator->sentence($nbWords);
return substr($sentence, 0, strlen($sentence) - 1);
}
public function ISBN()
{
return $this->generator->ean13();
}
}
我很好奇的是ISBN方法。它基本上使用其生成的基类的$ protected属性来调用名为ean13()的方法。但箭头符号通常用于调用方法或获取对象内的变量。我知道$ generator是类Generator的一个对象,因为它在构造函数中定义如下:
class Base
{
/**
* @var \Faker\Generator
*/
protected $generator;
/**
* @var \Faker\UniqueGenerator
*/
protected $unique;
/**
* @param \Faker\Generator $generator
*/
public function __construct(Generator $generator)
{
$this->generator = $generator;
}
但是我不知道程序在哪里找到方法ean13()。我打开了Generator类,找不到该名称的方法。我希望有经验的PHP开发人员能够解释它对我的实际效果。感谢
答案 0 :(得分:0)
你偶然发现了PHP调用“方法重载”的用法。 (注意,“方法重载”在其他语言中具有不同的含义)。 PHP Doc for method overloading
如果您检查Generator
类的源代码,您会在其中找到名为__call()
的方法。
这样做是捕获对Generator
类中不存在的方法的所有方法调用。
该方法依次调用format
方法,该方法对ean13
类中找到的可用格式化程序Barcode
进行查找。
这是您编写和加载自己的格式化程序的方法,并执行
之类的操作 $faker->my_own_format()
无需触及Generator类本身。