2017-12-19 9 views
0

저는 작곡가가 처음인데 클래스가 아닌 파일을 자동로드하는 방법을 알아낼 수 없습니다.작곡가는 비 클래스 파일을 요구하고 사용합니다

composer.json의 files 배열에 파일을 추가하고 composer install을 실행하려고했지만 운이 없었습니다. config.php를, 여기에

{ 
    "name": "app", 
    "description": "", 
    "require": { 
    "mongodb/mongodb": "^1.2" 
    }, 
    "autoload":{ 
     "files":["src/lib/config.php"] 
    } 
} 

가 아닌 클래스 기반 파일입니다

$foo = "Hello"; 

을 그리고 내가 전화 할 곳이다 :

내 composer.json처럼 보이는

require_once("vendor/autoload.php"); 

echo $foo; 

위의 값은 undefined variable: foo입니다.

파일이 자동로드되고 아마도 잘못된 네임 스페이스에있을 수 있습니다. 이 경우이 파일을 어떻게 호출할까요?

+1

클래스 정의가 포함되어 있지 않은 경우이 설정은 자동으로 config.php를 포함하지 않을 것입니다. 자동 로딩은 모든 파일이 아닌 클래스로 작동합니다. –

답변

2

나는 @MarkBaker 코멘트에 동의하지 않습니다. 실제로 파일은 자동으로로드되지만 그러한 파일에서 변수를 선언하는 것은 불가능합니다.

function hello() 
{ 
    echo "hello world"; 
} 

대신 $foo를 표시하는이 방법과 같이 호출합니다 : :

hello(); 

예상 얻을 것이다 결과 예를 들어

당신이 config.php 파일에 다음과 같은 기능을 넣어합니다.

변수가 표시되지 않는 이유는 파일이 작곡가를 통해로드되는 방법입니다

function composerRequire4b299eb5732a472abef81c6ea06043af($fileIdentifier, $file) 
{ 
    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { 
     require $file; 

     $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; 
    } 
} 

당신이 그렇게 정의 된 모든 변수는이 방법으로 범위가 파일이 방법 안에 필요시피가되지 않도록 그 후에 보일 수 있습니다 (이것이 PHP의 작동 방식입니다).

이렇게 우리의 질문에 대답하는 것은 예상 된 행동입니다. Composer가 자동로드 된 파일에 변수를 선언해서는 안됩니다. 유사한 기능이 필요한 경우 수동으로 파일을 요구해야합니다.

물론 구성 파일에 변수를 선언해야한다고 생각하지 않습니다. 오히려 배열 배열을 반환하고이 배열을 전역 변수 $config 변수 (가장 간단한 솔루션)에 할당하거나 해당 설정을 보유하고이 클래스에서 구성을 가져 오는 클래스를 사용해야합니다 (예 : Laravel에서 이와 같이 설정 한 경우).

+0

이것은 확실하게 많은 것을 명확하게 만들었습니다. 감사! :) – user3284463