2010-02-20 10 views
7

He creado una clase PHP llamada formChecker.php. Valida un formulario. Como programador de Java, me gustaría seguir con la idea de crear una instancia de esta clase en otra clase y ejecutarla desde allí. Parece que no funciona para mí. La siguiente es una demostración:Crear una clase PHP -> Crear un objeto en otra clase

class formChecker{ 

    ..... validation functions go here 

} 

class runFormChecker{ 

.... create instance of formchecker here and use it's methods etc. 

} 

¿Se puede hacer esto? Lo que estoy pensando es desarrollar una cantidad de clases que se puedan ejecutar por separado.

GF

+4

+1: Bienvenido a StackOverflow :) – Sarfraz

+0

En PHP, también es la convención de nombres de clases con una primera letra mayúscula. –

Respuesta

8

Prefiero pasar la instancia de formChecker (o algo que implementa una determinada interfaz) a la instancia de runFormChecker. ver http://en.wikipedia.org/wiki/Dependency_injection

podría ser tan simple como

interface FormChecker { 
    public function foo($x); 
} 

class MyFormChecker implements FormChecker 
    public function foo($x) { 
    return true; 
    } 
} 

class RunFormChecker { 
    protected $formChecker=null; 
    public function __construct(FormChecker $fc) { 
    $this->formChecker = $fc; 
    } 

    // .... 
} 

$rfc = new RunFormChecker(new MyFormChecker); 
+0

Sí. Esta es la opción preferible para mí. Similar a lo que estoy acostumbrado. Gracias. – user277813

0

Sí, y esto no es extraño. Sin embargo, normalmente crearía la instancia de formChecker dentro de una instancia de runFormChecker, y no a nivel de clase.

8

basta con incluir el archivo formChecker clase justo antes de la clase que desea utilizarlo en, por ejemplo:

include "formChecker.php" 

class runFormChecker{ 

    function __construct() { 
     $obj = new formChecker; // create instance 
     // more processing............ 
    } 
} 

Sin embargo, si usted tiene ambas clases en un archivo (que es malo), entonces no hay necesidad de incluir el archivo, se puede crear la instancia de esa enseguida por ejemplo:

class formChecker{ 
    // ............ 
} 

class runFormChecker{ 

    function __construct() { 
     $obj = new formChecker; // create instance 
     // more processing............ 
    } 
} 

More Information Here....

Gracias :)

+0

¿No es malo "incluir" el archivo también? ¿No es esto lo mismo que tener ambas clases en un archivo? – user277813

+1

@ grungefreak1: ¿cómo es esto malo? si coloca las clases en sus propios archivos y los incluye en otro archivo, volverán a ser uno, pero al ejecutar secuencias de comandos únicamente, pero fuera de la aplicación, permanecen en sus propios archivos, lo que hace que sea más fácil mantenerlos. – Sarfraz

+0

Punto tomado. Sin embargo, iré con el proceso de pasar un objeto al constructor de otro ya que está más en línea con mis ideas OOP.GF – user277813

Cuestiones relacionadas