دسترسی به متغیر های کلاس والد

D.A.V.O.O.D

Member
سلام
چجوری میشه مقدار متغیری که توی کلاس والد قرار دارد را نشان بدیم ؟

برای مثال ، مثال زیر را ببینید :

PHP:
<?PHP
class A
{
    var $Name;
    
    function A()
    {
        $this->Name = "davood";
    }
}

class B extends A
{
    function B()
    {
        echo parent::Name;
    }
}

new B();
?>

چجوری می توتم مقدار متغیر Name توی کلاس والد A را نمایش بدم ؟
parent:Name کار نکرد :cry:
 

ziXet

مدیر انجمن PHP/MYSQL
سلام
چجوری میشه مقدار متغیری که توی کلاس والد قرار دارد را نشان بدیم ؟

برای مثال ، مثال زیر را ببینید :

PHP:
<?PHP
class A
{
    var $Name;
    
    function A()
    {
        $this->Name = "davood";
    }
}

class B extends A
{
    function B()
    {
        echo parent::Name;
    }
}

new B();
?>

چجوری می توتم مقدار متغیر Name توی کلاس والد A را نمایش بدم ؟
parent:Name کار نکرد :cry:
فکر کنم اگه با var تعریف کنی نتونی مستقیم دسترسی داشته باشی!
یعنی باید یه تابع تو کلاس پدر تعریف کنی و مقدار Name رو برگردونی و در کلاس فرزند اون تابع رو که از نوع protected یا public هست رو فراخونی کنی.
اگه بخوای دسترسی مستقیم داشته باشی فکر کنم باید متغیر رو protected یا public تعریف کنی
تو ++C که اینجوریه!
اینم اگه وقت کردم تست میکنم میگیم

موفق باشید
 

zamanphp

Member
سلام
شما باید تو سازنده کلاس b ، باید سازنده کلاس A رو صدا بزنید.(روش اصولی هم همین هست) . من کدتون رو به شکل زیر اصلاح کردم :
PHP:
<?PHP
class A
{
    protected $Name;
    
    function __construct()
    {
        $this->Name = "davood";
    }
}

class B extends A
{
    function __construct()
    {
    	parent::__construct();
        echo $this->Name;
    }
}

new B();
?>
 

ziXet

مدیر انجمن PHP/MYSQL
سلام
شما باید تو سازنده کلاس b ، باید سازنده کلاس A رو صدا بزنید.(روش اصولی هم همین هست) . من کدتون رو به شکل زیر اصلاح کردم :
PHP:
<?PHP
class A
{
    protected $Name;
    
    function __construct()
    {
        $this->Name = "davood";
    }
}

class B extends A
{
    function __construct()
    {
    	parent::__construct();
        echo $this->Name;
    }
}

new B();
?>
مطمئنی؟
یعنی constructor کلاس پدر وقتی از فرزند شی میسازی به صورت خودکار صدا زده نمیشه؟
 

zamanphp

Member
مطمئنی؟
یعنی constructor کلاس پدر وقتی از فرزند شی میسازی به صورت خودکار صدا زده نمیشه؟
بستگی به شرایطی داره دوست عزیز. مثال :
PHP:
<?PHP
class A
{
    protected $Name;
    
    function __construct()
    {
        $this->Name = "davood";
    }
}

class B extends A
{
}

new B(); //output : 
?>

PHP:
<?PHP
class A
{
    protected $Name;
    
    function __construct()
    {
        $this->Name = "davood";
    }
}

class B extends A
{
    public function show()
    {
    	echo $this->Name;
    }
}

$F = new B();
$F->show();//output : davood
?>


.وقتی از کلاس B نمونه می گیریم ، سازنده کلاس B ، سازنده کلاس A رو Overwrite می کنه . برای این این اتفاق نیفته باید قبل سازنده کلاس والد یا به عبارتی َA رو صدا بزنین تا وظایف متد والد انجام بشه :
PHP:
<?PHP
class A
{
    protected $Name;
    
    function __construct()
    {
        $this->Name = "davood";
    }
}

class B extends A
{
    function __construct()
    {
        parent::__construct();
        echo $this->Name;
    }
}

new B();
?>
 
آخرین ویرایش:

ziXet

مدیر انجمن PHP/MYSQL
درسته !
وقتی کلاس فرزند هم سازنده داشته باشه فقط سازنده فرزند رو صدا میزنه و سازنده پدر صدا زده نمیشه.
البته سوال ایشون در این رابطه نبود.

موفق باشید
 

جدیدترین ارسال ها

بالا