PDA

View Full Version : حوره متغییر ها( کمک فوری لطفآ )



POLBADMAN
سه شنبه 18 مرداد 1390, 22:25 عصر
با سلام خدمت اساتید
میخواستم بدونم چطور باید یک متغییر عمومی globalرو در یک کلاس تعریف کنم که وقتی توی یک متد همون کلاس مقدارشو تغییر میدم در متد دیگر همون کلاس مقدار تغییر یافتش در دسترس باشه مثلا:


$varlable=0;
function first()
{
global $varable=1
}

function secund()
{
if($valable==1){
//yekarai bekon
}
}

Metal Gear Solid
چهارشنبه 19 مرداد 1390, 00:32 صبح
اگر نیاز شما فقط همینه که بین متد ها متغیر رد و بدل کنید که نیازی به Global کردن نیست
میتونی به این صورت کار کنی... .

class A {

public function A1(){
$variable1 = $this->A2();
echo $variable1;
}

private function A2(){
$variable2 = 10;
return $variable2;
}

}

$cl = new A;
$cl->A1();

اما اگر همچنان میخوای یه متغیر رو داشته باشی میتونی از پروپرتی ها property استفاده کنی


class A {

public $A;
public function A1(){
$this->A2();
echo $this->A;
$this->A3();
echo $this->A;
}

private function A2(){
$this->A = 'good';
}

private function A3(){
$this->A = 'better';
}

}

$cl = new A;
$cl->A1();

narsic
چهارشنبه 19 مرداد 1390, 01:34 صبح
سلام
میتونی از همون GLOBAL که در پست اول گفتی استفاده کنی (اسم متغیر هات رو اشتباه نوشتی) اما اول اینکه برا ی استفاده از این متغیرها باید در php.ini مقدار register_globals رو به On تغییر بدی .
البته این کار مشکلات امنیتی به همراه خواهد داشت البته با کمی زمان گذاشتن قابل رفع هستن اما در کل این روش توصیه نمیشه .
اگه مقداری که میخواید در کلاس ها به همراه داشته باشید در کل ثابت است میتوانید از ثابت ها استفاده کنید ریسک امنیتی پایین تری دارند و در همه جا هم پشتیبانی میشن .
موفق باشید

POLBADMAN
چهارشنبه 19 مرداد 1390, 02:07 صبح
با تشکر فراوان از وقتی که گذاشتین .ممنون
narsicوMetal Gear Solid
عزیز:قلب:
اما:
فکر کنم منظورم مو درست نرسوندم("مقدار تغییر یافتش ")
من مثلا همین روش پروپرتیی شما:

<?php
class A {

public $A;
public function A1(){
$this->A=0;

}

public function A2(){
if($this->A==1){echo "Afarin sad afarin";}
else{echo "na afarin na sad afarin";}
}

private function A3(){
$this->A = 'better';
}

}

$cl = new A;
$cl->A1();
$cl->A2();
?>
خطا نمی گیره ولی مثل اینکه طول عمره پروپرتی خارج تابع تموم میشه چه کنم؟؟؟
من دارم تو فریم ورک جوملا 1.5.23کار میکنم ممکنه جوملا یکاری کرده باشه؟
حدس خودم اینکه خطای منطقی داره اما کجا سوتی دادم نمی دونم:قهقهه:

narsic
چهارشنبه 19 مرداد 1390, 04:03 صبح
کد این صفحه از نظر من که مشکلی نداره و تابع A2 قسمت Else رو اجرا میکنه

Metal Gear Solid
چهارشنبه 19 مرداد 1390, 04:04 صبح
نه تموم نمیشه.
اصلاً اگر تموم شه که کلاً کلاس معنی خودش رو از دست میده!
اون کدی که خودت نوشتی هم مثل مرد کار میکنه.
نباید هم خطایی بگیره !!! :D

POLBADMAN
جمعه 21 مرداد 1390, 08:40 صبح
مشکل حل شد

اولآ ممنون از ارهنمایها تون :قلب:

من بد منظورم رسونده بودم .:خجالت:
ولی بعد که کدام مو چک کردم متوجه شدم مشکل کجاست . من منظوم این بود که چرا مقدار پروپرتی در متد بعدی کلاس مقدار تغییر یافتش در دسترس نیست .
ولی بعد فهمیدم مشکل از کجاست .گفتم اینجا بگم شاید به درد کسی بخوره.
بله بر خلاف قاعده مقدار پروپرتی تغییر نمی کرد. که اگه کدی که با لا نوشتم رو تست کنید میبینید که else اجرا میشه که باید هم بشه .
اما اینجا من داشتم توی یک الگوی MVC کار میکر دم که توی مدل پروپرتی و متد ها رو نوشته بودم چون تو ویو متدارو صدا میکردم (جدا جدا) برای همین اصلآ متد مثلآ A1 قبل از A2صدا زده نمی شد که مقدار پروپرتیرو تغییر
بده.
امیدارم منظور مو رسونده باشم.:قلب: