파일을 상대적으로 포함하는 데 몇 가지 문제가 있습니다. 문제는 require_once가 파일을 찾을 수 없다는 것이 아니라 파일이없는 곳에서 파일을 찾을 수 있다는 사실입니다. 문제를 세 개의 작은 클래스에서 제거했습니다.php require_once는 작업 디렉토리 대신 파일에 상대적인 파일을 포함합니다.
public_html/
index.php
commands/
CommandFactory.php
account/
Status.php
의 index.php :
require_once 'commands/CommandFactory.php';
$factory = new CommandFactory();
CommandFactory.php : 나는 다른에 CommandFactory를 이동하여 테스트 한
class CommandFactory{
public function __construct()
{
echo getcwd() . '<br/>'; //xxx\public_html (which is good, this is where index.php is
//require_once 'account/Status.php'; // This works as expected
require_once 'account/Status.php'; // This ALSO works, but it shouldn't
$status = new Status(); // This works, though it shouldn't.
}
}
그래서이 내 디렉토리 구조입니다 dir, 문제를 해결합니다. 그러나 파일을 포함시킬 수있는 이유를 이해할 수 없습니다. 그것은 CommandFactory의 상대적인 Status를 포함해서는 안되며, index.php로부터 상대적이어야합니다. 나는 현재 작업 디렉토리를 추가하여 어떤 일이 잘못되는지 알아 보았지만 알아낼 수는 없습니다. 어떻게 그리고 왜 이것이 효과가 있는지 아는 사람이 있습니까? php.net 사이트에서
을 방출 할 필요는 다른 행동을한다? – David
경로를 현재 파일에 상대적으로 요구하면. 색인이 아니라 어쨌든 클래스 안에있는 파일을 포함하는 것은 실제로 좋은 습관이 아닙니다. 클래스를 자동로드해야합니다. – DarkBee
"필요한 경우 경로는 현재 파일과 관련이 있습니다." 이것은 올바르지 않습니다. "그리고 OOP에서 내가 뭘하는지 알았고, 현재 파일과 관련이 있다면"명령/계정/Status.php "도 작동합니까? – David