vahid

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

vahid ۱۳۹۵/۰۸/۲۷ 46 زبان برنامه‌نویسی پی‌اچ‌پی

سلام به همگی


یه کلاس ساختم که خالیه ..حالا میخام یه 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 ?!

?>
پاسخ‌ها به این تاپیک
مصطفی پورغریب
مصطفی پورغریب
۱۳۹۵/۰۸/۲۹

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


۱- استفاده از سازنده کلاس (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 ان را نوشته و استفاده کنید.