2016-10-20 3 views
0

나는 faker를 처음 사용하며 PHP도 처음 사용했습니다. 제 질문은 PHP가 어떻게 작동하는지에 대한 것입니다. 내 질문에, 나는 가짜 데이터를 생성하는 PHP 라이브러리 인 Faker를 예로 들었다. 참고 URL은 : 나는 사기꾼 내부 문서를 통해 읽고이 코드를 보았다

https://github.com/fzaninotto/Faker#faker-internals-understanding-providers 

:

<?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 방법입니다. 기본적으로 기본 클래스의 $ generated protected 속성을 사용하여 ean13()이라는 메서드를 호출합니다. 그러나 화살표 기호는 일반적으로 메서드를 호출하거나 객체 내에서 변수를 가져 오는 데 사용됩니다.

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

PHP가 "메소드 오버로드"라고 부르는 것을 사용하는 것을 우연히 발견했습니다. ("메소드 과부하"는 다른 언어에서는 다른 의미를 가짐). 이 __call() 전화에 PHP Doc for method overloading

당신이 Generator 클래스의 소스 코드를 선택하면, 당신은 방법을 찾을 수 있습니다. Generator 클래스의 존재하지 않는 메서드에 대한 모든 메서드 호출을 catch합니다. 이 메서드는 Barcode 클래스에있는 ean13과 같은 사용 가능한 형식 지정기를 조회하는 format 메서드를 호출합니다.

이것은 당신이 작성하고 자신의 포매터를로드하고, 발전기 클래스 자체를 건드리지 않고

$faker->my_own_format()

등의 작업을 수행 할 수있는 방법입니다.