Sono abituato a lavorare in linguaggi come C#
/Java
/Python
dove ogni classe avrebbe un proprio file, e per una classe di per vedere altre classi, si farebbe importazione il pacchetto contenente le classi. Come funziona questo in php
? La documentazione mostra come creare classi, ma non capisco come tutto si combini in un contesto php
. Conosco la dichiarazione di inclusione, che lega semplicemente i file fondamentalmente.php oop - ogni file diverso di classe? pacchetto di importazione? ecc
risposta
È possibile utilizzare __autoload
function __autoload($class_name) {
include 'classes/'.$class_name . '.php';
}
Così svolge ogni singola classe nel proprio file nella cartella classi. Quando vuoi usare quella classe, la includerà. Ulteriori informazioni: http://php.net/manual/en/language.oop5.autoload.php
Aggiornamento: Quando ho risposto a questo era pienamente valido. Ora funziona ancora, ma di tenere presente PHP.net da allora dice questo:
spl_autoload_register() fornisce un'alternativa più flessibile per classi caricamento automatico. Per questo motivo, utilizzando __autoload() è scoraggiato e potrebbe essere deprecato o rimosso in futuro.
+1 per includere il link di riferimento –
Anche prendere un guarda: http://www.php.net/manual/en/function.spl-autoload-register.php – Mchl
Immaginate che state facendo il vostro oggetto in PHP in un file chiamato myObject.php
<?php
class myObject
{
public function __construct()
{
echo "Hello, World";
}
}
?>
E in un altro file, si desidera utilizzare l'oggetto (chiamiamolo questo myfile.php). Dovresti includere il tuo oggetto - come questo:
<?php
include("myObject.php");
$intance = new myObject();
?>
Abbastanza semplice.
In PHP puoi farlo in vari modi, il compilatore non ti limita.
Si può avere 1 classe 1 di file, 5 classi in 1 lima, 1 classe in più file utilizzando include ...
ma di solito è ancora 1 classe 1 file, e se si dispone di molti quelli piccoli - puoi averli anche in 1 cartella.
Quando si esegue 1 class in 1 file con lo stesso nome, è possibile impostare il caricamento automatico della classe in modo che non sia necessario scrivere gli include.
NON puoi avere una divisione di classe su più file. Vedi qui per esempio: http://stackoverflow.com/questions/1957732/can-i-include-code-into-a-php-class/1957830#1957830 – yokmp
Il modo più semplice:
- definire le classi in "classi" di directory applicative
- init come indicato qui sotto
- nomi di file nome della classe come il nome della classe in minuscolo con .php suffisso (MyClass = > classi/myclass.php) codice
Init:
set_include_path ("./classes");
spl_autoload_register();
//class is automatically loaded from ./classes/myclass.php
$object_instance = new MyClass();
A partire da PHP 5.3.0, si consiglia di utilizzare la funzione spl_autoload_register() poiché __autoload() si dice che sarà deprecato in futuro.
Un modo semplice per utilizzare questa funzione:
1) Luogo ogni file di classe nella cartella 'classi'
2) Eseguire una funzione anonima all'interno spl_autoload_register() che specifica la cartella classe:
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.php';
});
Ora quando si tenta di utilizzare una classe che non è ancora definita nel codice, controllerà la cartella della classe un'ultima volta prima di darti un errore.
Questo è bello ma è il modo migliore di utilizzarlo quando vuoi il tuo autoloader con il suo nome come descritto in Esempio # 1 qui: http://php.net/manual/en/function.spl-autoload-register.php In questo caso __autoload è sufficiente. –
- 1. Pacchetto di importazione Actionscript 3. * vs pacchetto di importazione. Classe
- 2. Caricamento di ogni classe in un pacchetto
- 3. PHP OOP :: Creazione di una classe wrapper API
- 4. Nome classe conflitto importazione nuovo pacchetto (java)
- 5. Catene di metodi PHP OOP
- 6. PHP OOP un sacco di setter, getter
- 7. Come Python OOP confronta con PHP OOP?
- 8. Python - classe di importazione dinamica
- 9. PHP OOP - Come gestire l'autorizzazione?
- 10. Importazione di una classe in un file JSP
- 11. OOP PHP: oggetti concatenabili?
- 12. Importazione di struct da un altro pacchetto e file golang
- 13. domanda di progettazione OOP
- 14. Comprensione dell'implementazione OOP in classe di Crockford
- 15. PHP [OOP] - Come chiamare manualmente il costruttore della classe?
- 16. metodi Importazione di una classe Python
- 17. PHP-OOP che estende due classi?
- 18. Strano pacchetto golang problema di importazione
- 19. Impossibile individuare il pacchetto di importazione javax.inject.Inject
- 20. Visibilità PHP amico/pacchetto
- 21. Esplora pacchetti di Eclipse ha icone diverse per ogni tipo di file: interfacce, classi astratte, ecc.
- 22. Prestazioni tra "dall'importazione del pacchetto *" e "pacchetto di importazione"
- 23. Real World Esempi di funzioni OOP avanzate per PHP
- 24. Importazione di file remoti tramite importazione ES6
- 25. Perché utilizzare PHP OOP su funzioni di base e quando?
- 26. Creazione di una classe di proprietà estendibile (OOP)
- 27. Xcode - Importazione di un file di intestazione diverso con lo stesso nome in base a Target
- 28. Errore assoluto di importazione nel pacchetto parziale che ombreggia un nome di pacchetto stdlib
- 29. PHP/MySQL OOP: caricamento di oggetti complessi da SQL
- 30. Importazione attraverso un pacchetto python
possibile duplicato di [Importa pacchetto o autoloading per PHP?] (Http://stackoverflow.com/questions/616231/import-package-or-autoloading-for-php) – Gordon
* (tipp) * ricerca di autoloading e convenzioni di codice in PHP – Gordon
Personalmente, trovo molto sensato avere ogni classe in un proprio file ... ma usare un autoloader anziché l'importazione di java –