Page 1 sur 1

POO

Posté : 16 août 2015, 15:53
par Chayaxoz
Bonjour,
J'ai un problème que je ne comprend pas et j'aurais besoin de votre aide.
J'ai déjà fait pas mal de POO en PHP mais je suis beaucoup plus habitué à la POO en Java et il y a plusieurs choses que je ne comprend pas.
D'abord, lorsque l'on créé une classe, imaginons :
Class MyClass {}, et que nous voulons par la suite instanciée cet objet, la bonne écriture est :
new MyClass; ou new MyClass();

Enfin j'ai vu sur certain du code qui fait
new MyClass($donnees) (ou $donnees est un array), alors que MyClass n'a pas de constructeur, comment peut on passer un tableau ou n'importe quoi d'autre en paramètre lorsque l'on instancie un objet si celui ci n'a pas de constructeur pour savoir quoi faire de ce paramètre ?

Merci de m'eclairer de vos lanternes...

Re: POO

Posté : 16 août 2015, 16:17
par or 1
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

Class MyClass {
  function MyClass(){
    echo "test";
  }
}

$o = new MyClass;
$b = new MyClass();
$c = new MyClass("test");
$t = array("kkj");
$d = new MyClass($t);  
?>
aucune erreur, on a donc le choix pour instancier un objet sans paramètre.
on peut passer un paramètre, alors que le constructeur n'en prévoit pas, mais cela ne sert à rien.
c'est donc moins strict qu'en java.

Re: POO

Posté : 16 août 2015, 18:36
par Chaya
Donc si on passe quelque chose en parametre mais qu'il n'y a pas de constructeur ça sert à rien c'est ça ? On ne pourras pas se servir de l'array passé en parametre ?

Re: POO

Posté : 17 août 2015, 02:03
par Genova
Contrairement à beaucoup de langages, PHP est extrêmement souple en ce qui concerne les paramètres. Tu peux passer plus de paramètres qu'il n'en faut, ils seront ignorés. La raison étant qu'il est possible de récupérer dynamiquement les paramètres avec func_get_args(), ce qui permet de créer facilement des fonctions avec X paramètres (ce qui est assez généralement une mauvaise pratique). Donc si tu passes des paramètres lorsque tu instancies une classe, et qu'elle n'a pas de constructeur, ça n'aura aucun effet, le paramètre est perdu dans la matrice :)

Sinon il n'y a pas de différence entre
new MyClass;
et
new MyClass();
Les deux fonctionnes, mais je te conseille de toujours mettre des parenthèses, inutile de jongler entre deux façons de faire différentes.