2009-08-19 10 views
2

J'ai donc:classes PHP question simple

class foo { 
    public $variable_one; 
    public $variable_two; 

    function_A(){ 
    // Do something 
    $variable_one; 
    $variable_two; 

    // If I define variable_3 here! 
    $variable_3 
    // Would I be able to access it in function_B? 
    } 

    function_B(){ 
    // Do something 
    $variable_4 = $variable_3 
    } 
} 


$myObj = new foo(); 
// Now what do I write in order to assign "variable_one" and "two" some value? 
$myObj->$variable_one = 'some_value' ?? 
$myObj->$variable_two = 'some_value' ?? 
+0

la syntaxe pour accéder aux attributs publics d'un objet est '$ myObj-> variable_one', et' $ myObj -> $ variable_one' est '$ myObj-> foo' si' $ variable_one == 'foo''. – p4bl0

+0

$ myObj-> variable_one = 'affecter la valeur à quelque chose'; – localshred

Répondre

7

Tout d'abord, lorsque vous écrivez simplement $variable_one; à l'intérieur A() ne pas se référer aux variables membres de votre classe! Ce serait une variable locale complètement différente, nouvellement créée, appelée $variable_one et qui n'a aucun lien avec la variable de classe.

Au lieu de cela, vous voulez:

function A() { 
    $this->variable_one; 
} 

Deuxièmement, votre $variable_3 est également une variable locale, et sera pas être accessible dans toute autre fonction. Troisièmement, vos affectations en bas sont correctes dans la forme, mais pas dans la syntaxe: il y a $ supplémentaire là-dedans. Vous voulez:

$myObj->variable_one = 'some value'; 
2

Non, $variable_3 a été créé (et seront détruits) dans le cadre de function_A. Cela est dû à la portée de la fonction.

http://us3.php.net/manual/en/language.variables.scope.php

Si vous souhaitez variable_3 $ à conserver par votre objet une fois l'exécution quitte le champ de function_A, vous devez lui attribuer comme une propriété de classe, semblable à variable_1 $ et variable2 $.

class YourClass 
{ 

    public $variable_1; 
    public $variable_2; 
    public $variable_3; 

    function_A() 
    { 
     $this->variable_3 = "some value"; // assign to the object property 
     $variable_4 = "another value"; // will be local to this method only 
    } 

    function_B() 
    { 
     echo $this->variable_3; // Would output "some value" 
     echo $variable_4; // var does not exist within the scope of function_B 
    } 

} 
1
$myObj->variable_one = aValue; 
$myObj->variable_two = anotherValue; 
0

Si variable_one et variable_two sont public, vous pouvez les assigner comme spécifié (il suffit de supprimer le "$" ... donc $ classObject-> variable_one). En général, vous voulez encapsulate vos variables en les rendant soit protégé ou privé:

class MyClass 
{ 
    protected $_variable_one; 

    public function getVariableOne() 
    { 
     return $this->_variable_one; 
    } 

    public function setVariableOne($value) 
    { 
     $this->_variable_one = $value; 
    } 
} 

$c = new MyClass(); 
$c->setVariableOne("hello!"); 

echo $c->getVariableOne(); // hello! 
1

Le code correct serait la suivante (voir la réponse dans les commentaires)

class foo { 
    public $variable_one; 
    public $variable_two; 
    private $variable_three; // private because it is only used within the class 

    function _A(){ 
    // using $this-> because you want to use the value you assigned at the 
    // bottom of the script. If you do not use $this-> in front of the variable, 
    // it will be a local variable, which means it will be only available inside 
    // the current function which in this case is _A 
    $this->variable_one; 
    $this->variable_two; 

    // You need to use $this-> here as well because the variable_3 is used in 
    // function _B 
    $this->variable_3; 
    } 

    function _B(){ 
    // Do something 
    $variable_4 = $this->variable_3 
    } 
} 


$myObj = new foo(); 
$myObj->variable_one = 'some_value1'; // Notice no $ in front of the var name 
$myObj->variable_two = 'some_value2'; // Notice no $ in front of the var name 

des variables de classe (propriétés) doivent être accessibles en utilisant le préfixe $ this->, à moins qu'ils ne soient statiques (dans votre exemple ils ne le sont pas). Si vous n'utilisez pas le préfixe $ this-> ils seront des variables locales dans la fonction que vous les définissez.

J'espère que cela aide!