دسترسی به فانکشن ها و متغییر های خارج از یک کلاس

سلام به همگی

یه کلاس ساختم که خالیه ..حالا میخام یه variable که خارج از این کلاس قرار داره وارد این کلاس کنم توی stackoverflow   گفته بودن باید از global  استفاده کنم ولی بازم نشد.فرض کنید این variable اوردیم توی کلاس چطور از طریق instance اونو نمایش بدیم ؟و اینکه بازم فانکشن هام عین variable  ها هستن ... ولی وقتی از define استفاده میکنیم توی کلاس دسترسی مستقیم به مقدارش داریم ..

<?php

// THIS IS A FUNCTION OUTSIDE  THE CLASS
function language(){
    $language = "php";
    return $language;
}

//THIS IS DEFINED OUTSIDE THE CLASS  
define("NAME","HTML");

//THIS IS A VARIABLE OUTSIDE THE CLASS
$number = 10;

//THIS IS THE CLASS
class Show {
    public $name = NAME;
    public $language = language();
    public $num = $number; 
}

//THIS IS AN INSTANCE OF CLASS
$show = new Show();
echo $show->name . "<br>"; // WORKS FINE
echo $show->language() . "<br>"; //  NOT WORKS !
echo $show->num; // NOT WORKS !

// SO WHY DO FUNCTIONS AND VARIABLES SHOW PARSE ERROR ?!  

?>
پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 7 سال پیش

برای اینکار چند روش وجود دارد که غیر استاندارد ترین آن استفاده از متغییر گلوبال است. برای ارسال متغیرهای خارج از کلاس میتوان از طریق های زیر استفاده کرد:

۱- استفاده از سازنده کلاس (constructor)

 

class Show {
    public $name = NAME;
    public $language = language();
    public $num;

    public function __constructor($num)
    {
      $this->num = $num;
    }
}

$show = new Show($number);

 

۲- روش دیگر استفاده از getter ها و setter ها است:

 

class Show {
    public $name = NAME;
    public $language = language();
    private $num;

    public function setNum($value)
    {
       $this->num = $value;
    }
}

$show = new Show();
$show->setNum($number);
// other codes

 

۳- یک روش دیگر هم هست که توصیه نمیشود، دسترسی مستقیم به پروپرتی کلاس:

 

class Show {
    public $name = NAME;
    public $language = language();
    public $num; 
}

$show = new Show();
$show->num = $number;

// other codes

 

 

دلیل اینکه

echo $show->language() . "<br>"; //  NOT WORKS !

 کار نمیکند هم این است که فانکشن language  تعریف نشده است. شما یک پروپرتی language دارید که نمیتوانید از آن بعنوان فانکشن استفاده کنید. برای اینکه به مقدار language دسترسی داشته باشید از همان دسترسی مستقیم یا getter ان را نوشته و استفاده کنید. 

online-support-icon