PDA

View Full Version : استفاده تابع isset در كلاس



mshoping
سه شنبه 19 فروردین 1393, 10:11 صبح
سلام دوستان
من ميخواستم بدونم كه چطور ميشه از تابع isset درون كلاسم استفاده كنم و تو برنامه براي بررسي متغير از اون تابعي كه نوشتم استفاده كنم چيزي كه خودم نوشتم اينه كسي ميتونه كمك كنه؟؟
ممنون از همه دوستان




public function issetvariable($var)

{
if(isset($var)){
return true;
}
return false;

}

داخل برنامه هم :
if ($functions->issetvariable($x))

sadegh1362
سه شنبه 19 فروردین 1393, 14:11 عصر
سلام
دوست عزیز نیاز به این کار نیست . خود تابع isset در هر جایی بخوای true , false بر می گردونه . نیاز به تابع نیست . اگر در کلاس هم استفاده کنی همینطور .
اما اگر متغر آرایه ای داری و می خوای تو کلاس یه تابع بنویسی که همیشه ست شدن متغیر رو چک کنه . کافیه متغیر آرایه رو با اندیسش بدی به isset بازم true ,false رو بر میگردونه .

MMSHFE
سه شنبه 19 فروردین 1393, 15:56 عصر
چیزی که شما میخواین، کلاس Container هست (کلاسی که برای نگهداری سایر متغیرها، اشیاء و... ازش استفاده میشه). نمونه کد زیر رو ببینید که با استفاده از متدهای جادویی PHP کار میکنه:

class Container {
private $vars;
public function __construct() {
$this->vars = array();
}
public function __get($key) {
return (isset($this->vars[$key]) ? $this->vars[$key] : null);
}
public function __set($key, $value) {
$this->vars[$key] = $value;
}
public function __isset($key) {
return array_key_exists($key, $this->vars);
}
public function __unset($key) {
if(isset(this->vars[$key])) {
unset($this->vars[$key]);
}
}
}
// usage
$functions = new Container;
$functions['ok'] = function() { echo 'ok'; };
$functions['hello'] = function($name) { return 'Hello ' . $name; }
if($functions->exists('ok')) {
$functions->ok(); // output: ok
}
if($functions->exists('hello')) {
$functions->hello('alireza'); // output: Hello alireza
}
if(!isset($functions->bye)) {
echo 'Function "bye" does not exist.'; // output: Function "bye" does not exist.
}
unset($functions->ok);

ahmad156
سه شنبه 19 فروردین 1393, 18:00 عصر
کد جالبی به نظر میرسه.میشه یه مثال عملی بزنین تا معلوم شه کجا کاربرد داره؟

MMSHFE
سه شنبه 19 فروردین 1393, 19:04 عصر
کلاً این کلاس الآن میتونه هر چیزی رو توی خودش نگهداری کنه. از متغیرهای معمولی گرفته تا اشیاء کلاسهای دیگه یا توابع و الی آخر. حتی میتونید با اعمالی مثل serialize کردن، اون رو تبدیل به متن کنید و توی سشن یا دیتابیس و... جهت استفاده های بعدی قرار بدین. مثلاً یک بخش از کد، تابعی رو به شئ ایجاد شده از این کلاس اضافه میکنه و بعد serialize میکنه و میگذاره توی سشن و بخش دیگه از کد توی یک صفحه دیگه، میاد شئ موجود در سشن رو میخونه و unserialize میکنه و تابع ایجاد شده رو صدا میزنه. یه چیزی شبیه SPLObjectStorage خود PHP ولی ساده تر و با امکانات بیشتر.

ahmad156
سه شنبه 19 فروردین 1393, 19:41 عصر
طرز کارکردش و کدهاش رو متوجه میشم.یه مثال عملی میخوام که چه زمانی از این کد استفاده کنم؟اصلاً چه فایده ای داره یه کلاس بتونه همه چی رو نگه داره؟
یه خرده برام مبهمه!!!:اشتباه:
ممنون

MMSHFE
سه شنبه 19 فروردین 1393, 19:53 عصر
خوب کاربردش بستگی به نیاز و میزان خلاقیت برنامه نویس داره. الآن ابزاری دارین که به کمک اون میتونید یکسری مقادیر رو نگهداری کنید. مثلاً فرض کنید توی یک کلاس، میخواین مقداری رو ست کنید که بیرون از کلاس بشه خوند یا مثلاً توی یک تابع، تابعی رو تعریف کنید که بیرون از تابع بشه ازش استفاده کرد و کلی کارهای دیگه. اینجور وقتها این کلاس بدرد میخوره. کافیه یک شئ Global ازش درست کنید و همه جا بهش دسترسی پیدا کنید. میتونید هر عنصری رو هم که خواستین تغییر بدین یا حذف کنید. در کل یک ظرف دارین که همه چیز توش جا میشه. اینکه از این ظرف چطور استفاده کنید بستگی به خودتون داره.

MMSHFE
چهارشنبه 20 فروردین 1393, 02:26 صبح
برای اینکه یک نمونه ملموس از کاربردهاش داشته باشین، فرض کنید توی یک پروژه ماژولار، میخواین یک کلاس داشته باشین که تمام کامپوننتهای برنامه داخلش قرار بگیرن. یه چیزی مثل شئ Application توی فریمورکها که مثلاً توی Yii میشه با ساختاری شیبه Yii::app()->db به کامپوننت db اون دسترسی پیدا کرد که در حقیقت یک شئ از کلاس CDbConnection هست. امیدوارم منظورم رو خوب رسونده باشم.

cpuram
چهارشنبه 20 فروردین 1393, 09:10 صبح
استاد ببینید من درست متوجه شدم؟
یه کلاس هست که شما میتونید به طور مستقیم نتیجه یک کلاس یا تابع دیگه رو ذخیره کنید بدون هیچ واسطه.

MMSHFE
چهارشنبه 20 فروردین 1393, 10:52 صبح
تقریباً درسته ولی بهتره اینطوری تکمیلش کنید که نه فقط نتایج یک کلاس یا تابع دیگه بلکه خود اشیاء یا توابع رو هم میتونید داخلش ذخیره کنید.