2017-10-08 6 views
0

Dans ma classe, je suis en train de définir la valeur d'une variable dans une fonction autre que __construct()POO PHP mis en valeur variable dans une fonction et obtenir d'une autre fonction

Mais j'ai besoin de cette valeur variable dans une autre fonction.

Voici ce que j'ai essayé. Mais ne fonctionne pas correctement.

I expect to print images getty but i get nothing :(

<?php 

class MyClass{ 
    public $var; 

    public function __construct(){ 
     $this->var; 
    } 

    public function setval(){ 
     $this->var = 'getty Images'; 
    } 

    public function printval(){ 
     echo $this->var; 
    } 
} 

$test = new MyClass(); 
$test->printval(); 
+0

Qu'est-ce que vous attendez-vous? et qu'est-ce que vous obtenez? –

+0

Je m'attends à imprimer 'getty images' mais je n'obtiens rien :( – Hudai

+1

Pourquoi pensez-vous imprimer quelque chose puisque vous ne mettez rien dans' $ this-> var'? – axiac

Répondre

5

Votre constructeur ne fait rien, vous devez appeler la méthode pour elle de faire quelque chose.

class MyClass{ 
    private $var; 

    public function __construct() { 
     // When the class is called, run the setVal() method 
     $this->setval('getty Images'); 
    } 

    public function setval($val) { 
     $this->var = $val; 
    } 

    public function printval() { 
     echo $this->var; 
    } 
} 

$test = new MyClass(); 
$test->printval(); // Prints getty Images 
+0

C'est comme, exactement la même chose que de définir la valeur dans le constructeur, sauf qu'il est plus indirecte Pourquoi faire simple quand on peut confondre l'enfer avec tout le monde?;) –

+0

N'est-il pas préférable d'utiliser des setters? OP a déjà une méthode pour définir cette valeur, alors pourquoi ne pas l'utiliser. votre point est d'utiliser directement '$ this-> var = 'getty Images';' dans le constructeur à droite? –

+1

Ce n'est pas un setter. Un setter serait 'function setValue ($ v) {$ this-> value = $ v; } '. Et non, l'injection de setter n'est généralement pas meilleure que l'injection du constructeur. C'est un peu un débat, mais je ne l'utilise jamais littéralement car cela ne mène généralement qu'à des problèmes sur la route. Dans ce cas précis, il n'y a littéralement aucune différence car ** la valeur n'est pas transmise à la fonction setter **. C'est un code mort. Donc oui, mon point est que cette fonction devrait être refactorisée dans le constructeur, car elle n'est pas réellement utilisée en dehors de la classe mais dans le constructeur. –

1

Vous devez appeler votre méthode setval() pour définir une valeur.

Essayez:

<?php 

$test = new MyClass(); 
$test->setval(); 
$test->printval(); 

Si vous êtes heureux d'avoir une valeur fixe, le réglage de la variable dans la __construct() fonctionnera bien et je recommande cette approche.

Si vous voulez une mais valeur dynamique, vous pouvez modifier votre setval méthode pour acccept un paramètre et enregistrer le paramètre passé à votre objet pour le rendu dans le cadre du printval() appel.

0

vous devez tout d'abord définir la valeur à votre variable avant de l'imprimer

<?php 

class MyClass{ 
    public $var; 

    public function setval(){ 
     $this->var = 'getty Images'; 
    } 

    public function printval(){ 
     echo $this->var; 
    } 
} 

$test = new MyClass(); 
$test->setval(); 
$test->printval(); 
?> 

sortie:

getty Images