شنبه یه خبراییه 🔥 منتظر شنبه باش 😉🥳
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ شعبان زاده
محدوده دید متغیر msg$
جامعه پی اچ پی ایجاد شده در ۱۳ دی ۱۴۰۱

استاد صالحی در داخل بلاک‌ها ( if & else) متغیر msg$ را تعریف و یک مقدار string به آن منتصب کردند . سوال من این هست که آیا محدوده دید متغیری که در داخل یک بلاک تعریف می‌شود در خارج از بلاک هم ادامه دارد؟

چون استاد صالحی msg$ را در خارج از بلاک‌ها echo می‌کنند .

و کلا سوالی که برای من پیش آمده این هست که scope متغیر‌ها در php چطوری هست؟

با سپاس .

سلام علی عزیز

اگر متغیر داخل شرط قرار بگیره طبق شرط مقدار میگیره.

برای مثال استاد داخل if به msg یک مقدار دادند و در else یک مقدار دیگه.

مقدار دهی طبق شرط صورت میگیره.

و در پایینتر اومدند msg رو یک مقدار دیگه دادند که از اون لاین به بعد msg با اون مقدار در دسترسه.

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

3e13-IMG_20230103_192852.jpg

کد استاد رو ببین.

مقدار msg در صورت برابر و نابرابر بودن با صد تغییر کرده و در خارج شرط قابل دسترسی هست.

پایینتر هم اومدیم مقدار msg رو تغییر دادیم و از اون لاین به بعد با اون مقدار در دسترس هست.

احمدرضا فاطمی کیا ۱۳ دی ۱۴۰۱، ۱۵:۴۳

ممنون از توضیحاتت احمد رضا جان .

احمد رضا جان شما درباره مقادیر متغیر توضیح دادید که خیلی هم عالی بود . اما سوال من درباره scope یا محدوده دید متغیری که داخل بلاک if -else تعریف شده است می‌باشد . منظورم از محدوده دید ، دسترسی به یک متغیر در خارج از بلاک بود . دربعضی از زبان‌ها مثل جاوا اگر داخل یک بلاک متغیری تعریف کنید و اگر همان متغیر را از خارج از بلاک فراخوانی کنید با خطا روبرو می‌شوید (دسترسی وجود ندارد ). فکر می‌کنم زبان php درباره scope متغیر‌ها سهل گیر‌تر است . در عین حال ممنون از راهنماییت.

شعبان زاده ۱۳ دی ۱۴۰۱، ۱۶:۳۶

ببین همین مورد توی فانکشن‌ها هست و از متغیرهای درون فانکشن‌ها نمیشه استفاده کرد.

اما در اینجا چون شما دارید متغیر رو ایجاد میکنید در صورت رخ دادن شرط موردنظر،دسترسی بهش دارید.

بطور کلی اگر متغیری در خارج از تابع تعیریف شود، خارج از تابع هم قابل دسترسیست.(خارح از تابع رو Global Scope میگن)

اما اگر داخل تابع تعریف بشه بهش میگن Local Scope و فقط همونجا قابل دسترسیست.

$x = 100;
function myTest() {
  $x = 5; // local scope
  echo "
Variable x inside function is: $x
";
} 
myTest();
// using x outside the function will generate an error
echo "
Variable x outside function is: $x
";

اگر بخواید داخل تابع به متغیر Global Scope دسترسی داشته باشی باید از کلمه کلیدی global در کنار متغیر استفاده کنی:

$x = 100;
function test() {
  global $x;
  echo $x;
  $x *= 5;
}
test();
echo $x;

یا به اینصورت:

$x = 100;
function test() {
  echo $GLOBALS['x'];
  $GLOBALS['x'] *= 5;
}
test();
echo $x;

یه روش هم static variable هست که محدوده اش Local Scope هست و قابلیتش اینه مقدارو حفظ میکنه:

function test()
{
    static $a = 0;
    echo $a;
    $a++;
}
test();  // echoes 0
test(); // echoes 1
test(); // echoes 2

برای اطلاعات بیشتر این لینکو بخونید.

احمدرضا فاطمی کیا ۱۳ دی ۱۴۰۱، ۱۷:۰۴

خیلی ممنون احمد رضا جان . متوجه شدم . . لطف کردی. موفق باشی .

شعبان زاده ۱۳ دی ۱۴۰۱، ۱۸:۰۱

سلام،

اگر پاسخ صحیح رو دریافت کردید، تایید پاسخ صحیح رو بزنید تا تاپیک از لیست پیگیری حذف بشه.

ممنون.

بهترین پاسخ
محسن موحد ۱۳ دی ۱۴۰۱، ۱۸:۰۵