🚀 تخفیف ۳۵٪ + ۳.۵ میلیون هدیه! برنامه‌نویسی رو الان شروع کن - فقط امروز!
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ Hossein S
سوال در مورد متغییرها در php
جامعه پی اچ پی ایجاد شده در ۰۵ تیر ۱۴۰۲

سلام وقت بخیر

من کلا توی این چن وقت خیلی گیج شدم درمورد متغییرها جای مختلف توی همین اموزش‌ها دیدم طرف چن تا متغییر تعریف میکنه مثلا $name بعد توی دفعات بعد توی یه فانکشن دیگه میاد میگه $name رو بعنوان ورودی بهش میدیم در صورت که اون متغیر اولی شاید نباشه مثلا


class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  function get_name() {
    return $this->name;
  }
  function get_color() {
    return $this->color;
  }
}
$apple = new Fruit("Apple" , "red");
echo $apple->get_name(),PHP_EOL;
echo PHP_EOL;
echo $apple->get_color();
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

class Fruit {
  public $Name;
  public $Color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  function get_name() {
    return $this->name;
  }
  function get_color() {
    return $this->color;
  }
}
$apple = new Fruit("Apple" , "red");
echo $apple->get_name(),PHP_EOL;
echo PHP_EOL;
echo $apple->get_color();
?>

مثلا اونجای که به متد کانسترکتور متغییر پاس میدم باید متغییری که اول تعریف کردیم بهش \\اس بدیم یا نه هر متغییر دیگری که فهمیدم هر متغییر دیگری که بهش \\اس بدم کا میکنه سوال من حالا اینه توی مثال اول من همه متغییرهای name رو با n کوچک تعریف کردم ... مفسر چطور متوجه میشه که این name کدوم name که من تعریف کردم

Hossein S ۰۵ تیر ۱۴۰۲، ۰۳:۲۲

از روی اسکوپ تشخیص میده؟

Hossein S ۰۵ تیر ۱۴۰۲، ۰۳:۳۵

سلام،

مثال اولتون که مشخصه، شما دوتا پراپرتی $name و $color بصورت public تعریف کردید و داخل constructor مقدار دهی کردید.

اما مثال دوم شما $Name و $Color تعریف کردید که هیجا استفاده نکردید. php به حروف کوچک و بزرگ حساس هست. داخل constrcutor شما دو پراپرتی بنام name و color بصورت dynamic تعریف کردید و ارتباطی با پراپرتی هایی که در بیرون تعریف کردید ندارند.

از php 8.2 به بعد اگر بصورت داینامیک پراپرتی تعریف کنید اخطار نمایش داده میشه: (تست)

Deprecated: Creation of dynamic property Fruit::$name is deprecated in /in/AdPkN on line 6
Deprecated: Creation of dynamic property Fruit::$color is deprecated in /in/AdPkN on line 7
محسن موحد ۰۵ تیر ۱۴۰۲، ۱۶:۳۸

یعنی پراپرتی‌های که به متد کانستکتور پاس میدیم درواقع همان پراپرتی‌های هستن که به صورت پابلیک اول کلاس تعریف کردیم

Hossein S ۰۶ تیر ۱۴۰۲، ۰۴:۲۱

اگر همنام باشند(حتی از لحاظ کوچکی و بزرگی حروف) بله. نتنها constructor بلکه در متدها هم قابل دسترسی هستند. معمولا در بیرون از متدها پراپرتی‌ها تعریف میشوند و در داخل مقداردهی میشوند.

بهترین پاسخ
محسن موحد ۰۶ تیر ۱۴۰۲، ۱۱:۲۲