È possibile in PHP istanziare un oggetto dal nome di una classe, se il nome della classe è memorizzato in una stringa?PHP può istanziare un oggetto dal nome della classe come una stringa?
risposta
Sì, sicuramente.
$className = 'MyClass';
$object = new $className;
<?php
$type = 'cc';
$obj = new $type; // outputs "hi!"
class cc {
function __construct() {
echo 'hi!';
}
}
?>
statico troppo:
$class = 'foo';
return $class::getId();
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla revisione] (/ recensione/post di bassa qualità/16691553) – Blackbam
@Blackbam risposta complementare relativa pertinente. Si prega di commentare solo se è utile. –
Vero che funziona fondamentalmente comunque un po 'di spiegazione della tua risposta sarebbe bello. La domanda era "può PHP istanziare un oggetto" ma l'accesso a una funzione membro statica non è un accesso a un oggetto. – Blackbam
Si può fare qualche invocazione dinamica memorizzando la nomeclasse (s)/metodi in una memoria come un database . Supponendo che la classe sia resiliente per gli errori.
sample table my_table
classNameCol | methodNameCol | dynamic_sql
class1 | method1 | 'select * tablex where .... '
class1 | method2 | 'select * complex_query where .... '
class2 | method1 | empty use default implementation
ecc .. Poi nel codice utilizzando le stringhe restituite dal database per classi e metodi nomi. puoi persino memorizzare query SQL per le tue classi, il livello di automazione se sei all'altezza della tua immaginazione.
$myRecordSet = $wpdb->get_results('select * from my my_table')
if ($myRecordSet) {
foreach ($myRecordSet as $currentRecord) {
$obj = new $currentRecord->classNameCol;
$obj->sql_txt = $currentRecord->dynamic_sql;
$obj->{currentRecord->methodNameCol}();
}
}
Io uso questo metodo per creare servizi Web REST.
- 1. Istanziare una classe Python da un nome
- 2. Istanziare una classe CoffeeScript da un nome classe in una stringa
- 3. come istanziare un oggetto di classe da una stringa in Objective-C?
- 4. Come istanziare la classe dalla stringa del nome in Rails?
- 5. Come posso istanziare un oggetto conoscendo solo il suo nome?
- 6. Perché puoi istanziare una classe da una variabile stringa ma non una stringa in PHP?
- 7. Istanziare una classe da una stringa
- 8. Ottenere oggetto classe Python dal nome della classe stringa nello stesso modulo
- 9. Istanzia classe dal nome?
- 10. Oggetto della classe DOMElement non può essere convertito in stringa
- 11. classi figlie istanziare dalla classe genitore (PHP)
- 12. Ottieni l'istanza della classe per nome della stringa della stringa
- 13. Istanziare dinamicamente una classe tramite la variabile
- 14. Una classe può restituire un oggetto stesso
- 15. php Oggetto della classe DateInterval non può essere convertito in stringa
- 16. Come istanziare una classe javascript in un altro file js?
- 17. Come istanziare la classe e init dalla stringa in Swift?
- 18. Come ottenere un oggetto di classe dal nome classe in Java
- 19. Perché non dovrei istanziare un oggetto stringa con un costruttore?
- 20. Istanziare una classe con o senza parentesi?
- 21. Convertire una stringa ("MyExampleClass") in un nome di classe (MyExampleClass)
- 22. Ottieni l'handle della finestra dal nome della classe della finestra
- 23. come convertire oggetto in stringa in PHP
- 24. Come istanziare anonimamente una classe astratta memorizzata in un oggetto Class in Java?
- 25. Come istanziare un oggetto in java?
- 26. PHP passando un nome di classe diventa una stringa quando passato a una funzione
- 27. C'è un modo per istanziare una classe con il suo nome in delphi?
- 28. PHP Errore: Nome della funzione deve essere una stringa
- 29. come dichiarare una classe PHP con un nome di variabile
- 30. Java: una classe parent può recuperare staticamente il nome classe di una classe figlio?
Cool, avrei dovuto provarlo prima di chiederglielo. Grazie! – user135295
@user - anche a destra. Mi chiedo perché sono venuto a SO direttamente invece di fare il minimo indispensabile? lol – Ben
In effetti non è così evidente. So che in Java è una cosa chiamata reflection, ma questo è molto semplice rispetto a quello. –