PDA

View Full Version : فعال کردن یکجای همه متغیرهای سراسری در داخل تابع (حل شد)



Tarragon
سه شنبه 14 آبان 1392, 15:49 عصر
با سلام
چجوری باید کاری کنم تا تمام متغیر ها توی یه فانکشن کار کنند؟(بدون نیاز به گلوبال)
ممنونم.

MMSHFE
سه شنبه 14 آبان 1392, 17:00 عصر
نمیشه. البته میتونید با آرایه GLOBALS$ هم مستقیماً کار کنید و نیازی نیست هر متغیر رو جداگانه با global تعریف کنید.

2undercover
سه شنبه 14 آبان 1392, 17:10 عصر
اگه از Closure استفاده کنید می تونید از کلمه کلیدی use استفاده کنید در غیر این صورت از جواب آقای شهرکی استفاده کنید!

Tarragon
سه شنبه 14 آبان 1392, 18:57 عصر
با سلام
چجوری باید کاری کنم تا تمام متغیر ها توی یه فانکشن کار کنند؟(بدون نیاز به گلوبال)
ممنونم.


نمیشه. البته میتونید با آرایه GLOBALS$ هم مستقیماً کار کنید و نیازی نیست هر متغیر رو جداگانه با global تعریف کنید.
نمی شه این کد رو مستقیم کرد؟ یعنی یه foreach براش نوشت که بدون نیاز به GLOBALS بهش دسترسی پیدا کرد؟

اگه از Closure استفاده کنید می تونید از کلمه کلیدی use استفاده کنید در غیر این صورت از جواب آقای شهرکی استفاده کنید!
اینی که می گید چجوری هست؟ می شه یه مثال بزنید؟

MMSHFE
سه شنبه 14 آبان 1392, 18:58 عصر
البته الآن یک راه دیگه هم به ذهنم رسید:


$x = 5;
$y = 7;

function test() {
extract($GLOBALS);
echo $x . ' , ' . $y;
}

test(); // output: 5 , 7

2undercover
چهارشنبه 15 آبان 1392, 05:06 صبح
اینی که می گید چجوری هست؟ می شه یه مثال بزنید؟



$var = 'output';
$closure = function() use($var) {
echo $var;
}
$closure();

Tarragon
شنبه 25 آبان 1392, 14:37 عصر
البته الآن یک راه دیگه هم به ذهنم رسید:


$x = 5;
$y = 7;

function test() {
extract($GLOBALS);
echo $x . ' , ' . $y;
}

test(); // output: 5 , 7

آقای شهرکی مثل اینکه روی اشیا جواب نمی ده ! یه تست می کنید؟



$var = 'output';
$closure = function() use($var) {
echo $var;
}
$closure();

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

MMSHFE
شنبه 25 آبان 1392, 14:43 عصر
برای من که کار کرد. کد تست:


class test {
public $x;
}

$t = new test();
$t->x = 5;

function test() {
extract($GLOBALS);
echo $t->x;
}

test(); // output: 5