web-dev-qa-db-fra.com

En php lors de l'initialisation d'une classe, comment passer d'une variable à cette classe pour l'utiliser dans ses fonctions?

Donc, voici l'affaire. Je veux appeler une classe et lui passer une valeur afin qu'elle puisse être utilisée à l'intérieur de cette classe dans toutes les diverses fonctions ect. ect. Comment pourrais-je m'y prendre?

Merci, Sam.

36
Sam152

Je veux appeler une classe et lui transmettre une valeur pour qu'elle puisse être utilisée à l'intérieur de cette classe

Le concept s'appelle "constructeur".

Comme le soulignent les autres réponses, vous devez utiliser la syntaxe de constructeur unifié (__construct()) à partir de PHP 5. Voici un exemple de la manière suivante:

class Foo {
    function __construct($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

// in code:

$foo = new Foo("some init value");

Notice - Il est possible que vous rencontriez des constructeurs de style ancien dans du code hérité. Ils ressemblent à ceci:

class Foo {
    function Foo($init_parameter) {
        $this->some_parameter = $init_parameter;
    }
}

Ce formulaire est officiellement obsolète à partir de PHP 7 et vous ne devriez plus l'utiliser pour du nouveau code.

54
Tomalak

Dans les nouvelles versions de PHP (5 ans et plus), la fonction __constuct est appelée chaque fois que vous utilisez "new {Object}". Par conséquent, si vous souhaitez transmettre des données à l'objet, ajoutez des paramètres à la fonction de construction, puis appelez

$obj = new Object($some, $parameters);

class Object {
    function __construct($one, $two) {}
}

Les constructeurs nommés sont supprimés de PHP au profit de la méthode __construct.

33
davethegr8
class SomeClass
{
    public $someVar;
    public $otherVar;

    public function __construct()
    {
        $arguments = func_get_args();

        if(!empty($arguments))
            foreach($arguments[0] as $key => $property)
                if(property_exists($this, $key))
                    $this->{$key} = $property;
    }
}

$someClass = new SomeClass(array('someVar' => 'blah', 'otherVar' => 'blahblah'));
print $someClass->someVar;

Cela signifie moins d'entretien à long terme.

L'ordre des variables passées n'est plus important, (plus d'écriture par défaut comme 'null': someClass (null, null, true, false))

L'ajout d'une nouvelle variable est moins fastidieux (il n'est pas nécessaire d'écrire l'affectation dans le constructeur)

Lorsque vous regardez l'instanciation de la classe, vous savez immédiatement à quoi les variables passées se rapportent: 

Person(null, null, true, false) 

contre 

Person(array('isFat' => true, 'canRunFast' => false)) 
18
M.B

C'est comme ça que je fais le mien

class MyClass {

       public variable;  //just declaring my variables first (becomes 5)
       public variable2; //the constructor will assign values to these(becomes 6)

       function __construct($x, $y) {
            $this->variable  = $x;
            $this->variable2 = $y;
       }

       function add() {
            $sum = $this->variable + $this->variable2
            return $sum;
       }

} //end of MyClass class

Créez une instance puis appelez la fonction add

$myob = new MyClass(5, 6); //pass value to the construct function
echo $myob->add();

11 ne sera pas écrit dans la page Ce n’est pas un exemple très utile car vous préféreriez transmettre une valeur à ajouter lorsque vous l’appelez, mais cela illustre bien ce point.

12
andrew

Vous pouvez faire ça comme ça:

class SomeClass
{
   var $someVar;
   function SomeClass($yourValue)
   {
       $this->someVar = $yourValue;
   }

   function SomeFunction()
   {
       return 2 * $this->someVar;
   }
}

ou vous pouvez utiliser __construct au lieu de SomeClass pour le constructeur dans php5.

3
empi

Pense que tout le monde manque l'évidence ici. Oui, le constructeur PHP4 est obsolète, mais vous pouvez écrire votre classe pour qu'elle soit rétrocompatible comme ceci: 

class myClass {

    var $myVar;

    function myClass { // PHP4 constructor, calls PHP5 constructor
        $this->__construct();
    }

    function __construct() { // PHP5 constructor
        doSomeStuff($myVar);
    }
}
0
Chris Cox