2009-09-14 3 views
3

main.php에서 자동로드가 추가되고 새 오브젝트가 작성됩니다. Shape.phpShape.phpShape.phpShape.phpautoloaded 클래스의 부모 클래스에 대해 __autoload()가 호출 되었습니까?

class Triangle extends Shape {...} 

Shape.php는 추상 클래스입니다.

abstract class Shape { 
    abstract protected function get_area(); 
    abstract protected function get_perimeter(); 
} 

__autoload 함수를 볼 수 있습니다. Triangle.php을 호출하지만 동시에 Shape.php를 호출합니까?

답변

8

아니요 (정확한 시간은이 아닙니다.) 예 (로드되고 모든 것이 작동합니다).

new Triangle을 호출하면 Triangle이 아직로드되지 않은 클래스이므로 __autoload()이 호출됩니다. 그러면 require_once Triangle.php 파일이됩니다.

Triangle.php를 해석 할 때로드되지 않은 다른 클래스 (도형)가 있으므로 프로세스가 반복됩니다.

간단히 말해서, 당신이 가진 것보다 더 할 일이 없지만 여러 단계에서 그 일을합니다.

+0

+1하지만 (의견입니다) 괄호를 생략 첫 번째 문장은''아니요, 그렇습니다 ''라고 쓰여 있습니다 :) – soulmerge

+0

hehe yeah - 'twas on purpose. "아니오"는 정확히 묻는 것에 답하고 "예"는 내가 의미하는 바를 대답했다. – nickf

2

그래야합니다. 난 당신이 단순히 __autoload 핸들러에

echo "loaded $class!\n"; 

문을 추가하여 다음을 확인 수도 있겠죠?

1

클래스 정의를 찾을 수 없을 때마다 자동로드가 실행됩니다. 이 처음 삼각형을 요구하게 될 경우

는 다음 파서가 Triangle.php에 모양 참조를 발견과 의지 후 자동로드 Shape.php

<?php 
function __autoload($class) { 
    print "autoloading $class\n"; 
    require_once($class . '.php'); 
} 

$t = new Triangle(); 

[~]> php test.php 
autoloading Triangle 
autoloading Shape 
관련 문제