2017-10-14 4 views
-6
<?php 
    class Test 
    { 
     private $a = 10; 
     public $b ='abc'; 



} 
class Test2 extends Test 
{ 

    function __construct() 
    { 

     echo $this->a; 
     echo $this->a = 20; // wh 
    } 

} 
$test3 = new Test2(); 

Répondre

3
echo $this->a; 

échos valeur de la propriété de la classe a. Cette propriété est non définie, car la propriété a de la classe Test est privée et n'est donc pas disponible dans la classe Test2. Ainsi, la propriété a est créée dans la classe Test2.

echo $this->a = 20; // wh 

part le prochain: attribue 20-a propriété (qui a été créé sur la ligne précédente) et fait écho à la suite de la cession qui est 20.

La solution:

class Test 
{ 
     // protected property is avalilable in child classes 
     protected $a = 10; 
     public $b ='abc'; 
} 

class Test2 extends Test 
{ 
    function __construct() 
    { 
     echo $this->a; 
     $this->a = 20; 
     echo $this->a; 
    } 
} 
$test3 = new Test2(); // outputs 10 20 
+1

Bleh. Je ferme a voté pour la mauvaise raison. J'aurais dû duper ce sur https://stackoverflow.com/questions/4361553/what-is-the-difference-between-public-private-and-protected – Machavity

+0

merci pour votre aide –

-1

Vous devriez changer

private $a = 10; 

à:

protected $a = 10; 
+0

Bien sûr, mais la question est "pourquoi" ? Vous pourriez apprendre une chose ou deux de [la réponse de u_mulder] (https://stackoverflow.com/a/46745074/1415724). –

+0

merci walid ajaj –