2016-09-24 1 views
0

Ich habe verschiedene Klassen, in denen ich verschiedene Eigenschaften habe. Jetzt möchte ich diese Klassen zur Laufzeit instanziieren. Bitte werfen Sie einen Blick auf mein Beispiel. Vielen Dank für Ihre Hilfe.Neue dynamische Instanz in PHP einer Klasse zur Laufzeit

class costumers 
{ 
     $ Name; 
... 
} 

class users 
{ 
   $ Username; 
... 
} 


class db_helper{ 
... 
public function select (object $table, $columns, $limit, $offset) { 
     // Instance the object like 
      $out = new typeof ($table); 
} 

}

+0

könnten Sie ein wenig beschreibender sein? Was ist 'new typeof()'? Welche der beiden Klassen ("Kunden" und "Nutzer") möchten Sie innerhalb der Auswahlfunktion instanziieren? Und wo wird diese Select-Funktion deklariert? – Poiz

+0

Ich möchte eine neue Instanz des Tabellenobjekts erstellen. – user332070

+0

Dann gehen Sie den falschen Weg .... denn wie Sie Ihren eigenen Code sehen können, ist '$ table' bereits ein' Objekt' .... nicht eine 'Klasse' und Sie können direkt damit beginnen '$ table' ohne es wieder instanziieren ..... – Poiz

Antwort

0

Vielleicht möchten Sie in diesem kommentierten Code einen Blick nehmen. Es kann Ihnen einige Hinweise geben ....

<?php 

    class costumers { 
     protected $Name; 
     //... 
    } 

    class users { 
     protected $Username; 
     //... 
    } 


    class db_helper { 
     //... 
     // NOTICE THAT THERE IS NO TYPE-HINT HERE... 
     // BAD PRACTICE! BUT THIS IS TO DEMONSTRATE 
     // THE POSSIBILITIES AVAILABLE TO YOU IN THIS CASE... 
     public function select($table, $columns, $limit, $offset) { 
      // INITIALIZE $out TO NULL TILL YOU KNOW MORE... 
      $out = null; 
      if(is_object($table)){ 
       // IF $table IS AN OBJECT.... 
       // JUST START USING IT WITHOUT INSTANTIATION: 
       $out = $table; 
      }else{ 
       if(class_exists($table)){ 
        // Instance the object like 
        $out = new $table; 

       } 
      } 
     } 
     // START USING THE OBJECT: $out 
    } 
0

Ich denke, was Sie versuchen, eine neue Instanz der gleichen Klasse wie die $table Objekt zu erstellen, zu tun ist? Dann ist es einfach mit get_class() Funktion:

class db_helper{ 
    ... 
    public function select (object $table, $columns, $limit, $offset) { 
     // Instance the object like 
     $class = get_class($table); 
     $anotherTable = new $class(); 
     // ... 
    } 
} 
0
$className = get_class($table); 
$out = new $className(); 

Wenn Sie mehr etwas tun wollen, wenden Sie sich bitte über Reflexion lesen.

Verwandte Themen