سلام
کد زیر رو مشاهده کنید:
<?php
class person{
private $nationalCode;
public function __construct()
{
//$this->nationalCode = rand(100,1000);
$this->setNationalCode(rand(100,1000));
}
// setter
public function setNationalCode($nationalCode){
$this->nationalCode = $nationalCode;
}
// getter
public function getNationalCode(){
return $this->nationalCode;
}
}
$myName = new person();
echo $myName->getNationalCode();
در قسمت __construct() با دو روش میشه کد رندوم رو قرار داد:
$this->nationalCode = rand(100,1000);
//OR
$this->setNationalCode(rand(100,1000));
یه روش سوم هم وجود داره. مانند کد زیر:
<?php
class person{
private $nationalCode;
public function __construct()
{
//$this->nationalCode = rand(100,1000);
//$this->setNationalCode(rand(100,1000));
}
// setter
public function setNationalCode($nationalCode){
$this->nationalCode = $nationalCode;
}
// getter
public function getNationalCode(){
return $this->nationalCode;
}
}
$myName = new person();
$myName->setNationalCode(rand(100,1000));
echo $myName->getNationalCode();
الان میدونم اگه توی Constructors ست بشه، در آخر میشه اون رو با Destructors نابود کرد که توی این سرفصل آقای آوند کامل توضیح دادند.’
اما در کل، کدام روش مناسب تر هست؟ کدام مبحث میتونه به ما کمک کنه روش بهتر رو در این موارد انتخاب کنیم؟ میشه یه کد رو به روش های مختلف نوشت و اجرا کرد، اما چگونه بهترین روش رو میشه تشخیص داد؟
سلام
ببینید هدف از ایجاد setter ها این هستش که ما به پراپرتی ها مقدار بدیم ولی تحت یک شرط خاصی
یک مثال از دنیا واقعی میزنم که بهتر درک کنید:
ببینید شما نام و نام خانوادگیتون که سید رضا بازیار هستش رو در پروفایلتون گذاشتین
پس هرکسی هم میتونه این اطلاعات رو ببینه بدون شرط خاصی
ولی اگه کسی شماره موبایل شما رو بخواد یا آدرس خونتون رو بخواد؛ همینطوری و بدون شرط بهش نمیدین
چون اطلاعاتی هستش که تحت یک شرط خاصی به کسی میدین
مثلا اگه طرف دوست شما باشه؛ یا از بستگان شما باشه
پس ما زمانی که بخوایم یک سری شرط بذاریم و بعدش مقدار دهی رو انجام بدیم؛ از setter استفاده میکنیم
تو این مثال شما اگه قراره کد ملی رو از کاربر بگیریم؛ باید یک سری شرط چک بشه مثلا
کد ملی حتما عدد باشه
هیچ کارکتری توی اون نباشه
پس این شرط ها باید در setter چک بشه که اگه کد ملی وارد شده توسط کاربر عدد بود؛ در پراپرتی مربوطه گذاشته بشه
ممنون از توضیحات تون. الان سوال من اینه که این سه روش که عدد رندوم برمیگردونه، چه تفاوت هایی دارند و کدوم روش در چه شرایطی بهتره؟
درود
زمانی که کلاس ما setter داره ما داریم کلاسمون رو mutable تعریف میکنیم ینی اینکه ما اون آبجکت رو بعد از ساختش میتونیم هی تغییرش بدیم با توجه به setter هایی که داره. ما باید سعی کنیم که داده ها رو از construct پاس بدیم و تا اونجایی که ممکنه کلاسمون رو immutable کنیم تا نشه تغییرش داد تا بعدا جاهای مختلف از خودش رفتارهای مختلفی نده که دردسر ساز باشه