ست کردن مقدار کد ملی تصادفی در __construct با کدام روش بهتر است؟

پرسیده شده
فعالیت 950 روز پیش
دیده شده 356 بار
0

سلام

 

کد زیر رو مشاهده کنید:

 

<?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 نابود کرد که توی این سرفصل آقای آوند کامل توضیح دادند.’

 

اما در کل، کدام روش مناسب تر هست؟ کدام مبحث میتونه به ما کمک کنه روش بهتر رو در این موارد انتخاب کنیم؟ میشه یه کد رو به روش های مختلف نوشت و اجرا کرد، اما چگونه بهترین روش رو میشه تشخیص داد؟

فایل پیوست

سیدرضا بازیار
سیدرضا بازیار

24 شهریور 00

1
حذف شده

سلام

 

ببینید هدف از ایجاد setter ها این هستش که ما به پراپرتی ها مقدار بدیم ولی تحت یک شرط خاصی 

 

یک مثال از دنیا واقعی میزنم که بهتر درک کنید:

 

ببینید شما نام و نام خانوادگیتون که سید رضا بازیار هستش رو در پروفایلتون گذاشتین 

پس هرکسی هم میتونه این اطلاعات رو ببینه بدون شرط خاصی

 

ولی اگه کسی شماره موبایل شما رو بخواد یا آدرس خونتون رو بخواد؛ همینطوری و بدون شرط بهش نمیدین 

چون اطلاعاتی هستش که تحت یک شرط خاصی به کسی میدین 

مثلا اگه طرف دوست شما باشه؛ یا از بستگان شما باشه 

 

پس ما زمانی که بخوایم یک سری شرط بذاریم و بعدش مقدار دهی رو انجام بدیم؛ از setter استفاده میکنیم 

 

تو این مثال شما اگه قراره کد ملی رو از کاربر بگیریم؛ باید یک سری شرط چک بشه مثلا

کد ملی حتما عدد باشه 

هیچ کارکتری توی اون نباشه 

 

پس این شرط ها باید در setter چک بشه که اگه کد ملی وارد شده توسط کاربر عدد بود؛ در پراپرتی مربوطه گذاشته بشه

فایل پیوست

amir tavakolian

توسط

amir tavakolian

24 شهریور 00

0
حذف شده

ممنون از توضیحات تون. الان سوال من اینه که این سه روش که عدد رندوم برمیگردونه، چه تفاوت هایی دارند و کدوم روش در چه شرایطی بهتره؟

فایل پیوست

سیدرضا بازیار

توسط

سیدرضا بازیار

25 شهریور 00

0
حذف شده

درود

زمانی که کلاس ما setter داره ما داریم کلاسمون رو mutable تعریف میکنیم ینی اینکه ما اون آبجکت رو بعد از ساختش میتونیم هی تغییرش بدیم با توجه به setter هایی که داره. ما باید سعی کنیم که داده ها رو از construct پاس بدیم و تا اونجایی که ممکنه کلاسمون رو immutable کنیم تا نشه تغییرش داد تا بعدا جاهای مختلف از خودش رفتارهای مختلفی نده که دردسر ساز باشه

فایل پیوست

امیر صالحی

توسط

امیر صالحی

25 شهریور 00

حذف شده
سلام. این درست نیست که بخاطر immutable کردن پراپرتی ها encapsultion رو نادیده بگیریم. بعدم اگه در کانستراکت اضافه کنیم و پراپرتی رو پابلیک کنیم، دیگه immutable معنی نداره، همین نکته که برنامه نویس با private کردن یک مفهوم رو درست میکنه، پس با encapsulation هم میتونه مفهوم تغییر ناپذیریو پیاده کنه.
محسن موحد

26 شهریور 00

حذف شده
ضمن اینکه اصلا راه دسترسی به پراپرتی های استفاده از setter و getter هست. برای مثال در دیزاین پترن اکتیورکورد که مهترین داده ها رو دسترسی میگیریم با encapsulation پیاده میشه. مورد دیگه اینکه در PHP 8.1 کیورد readonly اضافه میشه.
محسن موحد

26 شهریور 00