그래서 PHPWord에서 소스 코드를 검토 중이었고이 코드 스 니펫이 어떻게 작동하는지 알아낼 수 없었습니다.PHP의 다른 클래스에서 저장된 클래스의 메서드 사용에 대한 설명
class PHPWord_Shared_XMLWriter {
/**
* Internal XMLWriter
*
* @var XMLWriter
*/
private $_xmlWriter;
public function __construct($pTemporaryStorage = self::STORAGE_MEMORY, $pTemporaryStorageFolder = './') {
// Create internal XMLWriter
$this->_xmlWriter = new XMLWriter();
...
}
}
그래서 PHP에 대한 이해 이것을 $에 액세스 할 수있는 유일한 방법에 따라 -> _ XmlWriter를 방법은 다음과 같이 호출하는 것입니다 : 그러나
$testClass= new PHPWord_Shared_XMLWriter();
$testClass->_xmlWriter->startDocument();
, theDocProps에서이 코드 조각이다. php이 코드 라인은 다음과 같이 구현됩니다 :
$objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY);
$objWriter->startDocument('1.0','UTF-8','yes');
어떻게 작동합니까? 그것을 복제 할 수는 없지만 파일에서 사용할 때 작동합니다. 명확히하기 위해 PHPWord_Shared_XMLWriter에 정의 된 startDocument()라는 메서드는 없습니다. 나는 정말로 간단한 것을 놓치고있는 것처럼 느낀다. 그러나 나는 심지어 그것을 찾을 수 없다.
감사합니다.
'$ _xmlWriter'는 해당 클래스 외부에서 직접 액세스 할 수 없습니다 의미, 개인 변수, 그래서 당신이 설명하는 방법을 액세스 할 수 없습니다. 'startDocument'는'PHPWord_Shared_XMLWriter' 클래스의 public 메쏘드 일 뿐이므로, 그렇게 사용할 수 있습니다. – edwardmp
@edwardmp 사실, '__call' 마법 메서드를 사용하여 이러한 메서드를 사용할 수 있습니다. 그렇지 않으면 귀하의 의견이 정확합니다. –
@EdCottrell은 출처를 보지 않았습니다. 단지 추측이었습니다. 실제로 마술 방법은이 방법을 '창조'합니다. – edwardmp