🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ مصطفی کیانفرد
نقض Encapsulation
جامعه پی اچ پی ایجاد شده در ۰۲ مرداد ۱۳۹۹

سلام اقای آوند وقت بخیر. یه سوال برام پیش اومده در مورد نقض انکپسولیشن

class ٍEs{

    

    private $name;

 

    public function __construct($name)

    {

        $this->name = $name;

    }

    public function getName(){

        return $this->name;

    }

}

$name=new Es("mostafa");

echo $name->getName()

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

سلام 

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

 

<?php
class Es{
    private $name; 
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function getName(){
       return $this->name;
    }
}
$name=new Es("mostafa");
echo $name->getName();

در مورد اینکه با کانستراکتور نقض میشه شما اومدی پراپرتی پرایوتت رو از طرق کانستراکتور مقدار دهی کردی تا اینجا که نقضی من نمیبینم ( البته از نظر من !‌ ممکنه هم اشتباه کرده باشم‌!)

شما نباید بصورت مستقیم به اون پراپرتی دسترسی داشته باشی خارج از کلاس یعنی شما شی بسازی از کلاس و سپس مستقیما از طرریق اون شی به پراپرتی دسترسی داشته باشی ( تغیر بدی یا اینکه متغیر رو صدا بزنی‌) 

اما خود کانستراکتور ( از نظر من ) مثل یک متود ستر داره الان استفاده میشه که اشکالی فکر نمیکنم داشته باشه.

 

میثم ۰۲ مرداد ۱۳۹۹، ۱۳:۵۶

ممنونم از راهنماییتون آخه یکم برام گنگ بود تقریبا الان دیگه جا افتاد!

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

<code>

<>

درج کد

ممنون

مصطفی کیانفرد ۰۲ مرداد ۱۳۹۹، ۱۶:۵۶

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

 

هرچند که هدف از پرایوت کردن پراپرتی این بوده که فقط داخل کلاس بشه بهش دسترسی داشت بنابرین بنظرم میرسه اگر اینکار رو نکنیم از نظر استاندارد برنامه نویسی بهتر باشه

فــــــــــــــــــــرزان ۱۵ مرداد ۱۳۹۹، ۲۰:۱۹