Domanda

sto notando che l'aggiunta del percorso di una cartella di necessità che comprendono non è sufficiente per accedere alle classi.

Ho un'applicazione cartella / test / che contiene application / test / Test.php

class Test.php prende il nome di test senza prefissi

class Test {

}

Se aggiungo i test cartella solo nel percorso includono

realpath(APPLICATION_PATH . '/tests')

La classe Test.php non funziona nei controllori

new Test()

in modo da non sta comprendendo la cartella nella includere abbastanza percorso?

È stato utile?

Soluzione

@StasM ha ragione. Ma ecco una piccola spiegazione di più.

Il include_path dice a PHP dove guardare quando si esegue una include, un include_once, un require, o un require_once. Naturalmente, queste includes e requires riferimento sempre un particolare file .

L'auto-caricamento è specifico di perdere classi . Quando una classe non ancora scaricata viene fatto riferimento nel codice - in genere, anche se non esclusivamente, invocando l'operatore new, come nel tuo esempio - allora autoloading è un processo che può calciare con un algoritmo per il caricamento della classe. Questo processo comporta generalmente a partire dal nome della classe mancante e la produzione di una collezione di possibili percorsi - sia in assoluto nel filesystem o relativa alle voci del include_path - dal nome della classe mancante e quindi fare eseguire una include nella speranza che la definizione di classe risiede in uno di essi.

Nel tuo caso, hai chiamato per una classe denominata "Test". Il file che contiene questa classe risiede nel file APPLICATION_PATH . 'tests/Test.php'. E che ha riposto la APPLICATION_PATH . 'tests' directory nel include_path. Ma finché non ci sarà un algoritmo caricamento a posto, non c'è alcun modo per il sistema per collegare il nome della classe 'Test' al nome del file 'Test.php'.

Il PEAR in stile nome della classe convenzione fornirebbe questa connessione. E un autoloader che impiega tale convenzione - come il caricatore automatico Zend Framework predefinito -. Sarebbe in grado di svolgere tale mappatura da nome della classe per il nome del file, e quindi include il file richiesto

Come una complicazione finale, i convenzionali Zend Framework luoghi layout di directory convention alcune classi in cartelle che sono non sul percorso sono: modelli, le forme, i servizi, i controllori, vista aiutanti, aiutanti d'azione, ecc . Ecco perché ti capiterà spesso di vedere più la configurazione del caricatore automatico - in genere nella classe Bootstrap - la definizione di una mappatura tra certi classnames e certi luoghi nel filesystem che sono off il include_path.

Ad esempio, una classe denominata 'Default_Model_User' potrebbe - a prima vista - essere previsto per risiedere sul include_path in un file 'Default/Model/User.php'. Ma la struttura di directory app di serie vuole mettere quel file in 'application / modelli / User.php'. Si noti il ??plurale 'modelli' e il minuscolo 'm' nel nome del percorso, così come la presenza di "default" nel nome di classe. config Extra il caricatore automatico è necessario al fine di dare un senso a ciò, il fornire un modello per la mappatura nome di classe-a-nome del file. Questo è di solito realizzato con un risorsa autoloader .

La speranza di tutto questo aiuta, o si o qualcun altro. Cheers!

Altri suggerimenti

include il percorso di spettacoli in cui PHP cercherei script che è in procinto di includere - in modo che quando si dice motore PHP include('blah.php') avrebbe cercato blah.php in tutti i percorsi nel percorso includono.

Autoloading è la funzionalità che consente certa funzione da chiamare quando PHP rileva che classe è necessaria ma non definito. In questa funzione, è possibile utilizzare il percorso di inclusione per trovare il file che contiene la classe e caricarlo, ma queste sono cose assolutamente diverse.

realpath() non è correlato a una di queste ed è una funzione che restituisce percorso filesystem unica di un dato file, con le cose come .. e collegamenti simbolici risolti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top