/
  • کمک برای درک یک کد

  • ارسال پاسخ   امتیاز موضوع:
    • 1 رأی - میانگین امیتازات: 5
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی کمک برای درک یک کد
    نویسنده پیام
    Heretic آفلاین
    عضو جدید
    **

    ارسال‌ها: 6
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۴
    اعتبار: 0
    تشکرها : 4
    ( 0 تشکر در 0 ارسال )
    ارسال: #1
    کمک برای درک یک کد
    سلام
    جدیدا مدتیه دارم شی گرایی رو یاد میگیرم
    امروز تویه یه کد به مشکلی برخوردم ممنون میشم یه نفر برام توضیح بده

    کد PHP:
    require_once ("db.php");
    class 
    User {
        
        public 
    $id;
        public 
    $username;
        public 
    $password;
        public 
    $name;
        public 
    $lname;
      
      public static function 
    find_by_id($id=0) {
        
    $result_array self::find_by_sql("SELECT * FROM user WHERE id={$id} LIMIT 1");
            return !empty(
    $result_array) ? array_shift($result_array) : false;
      }
      
      public static function 
    find_by_sql($sql="") {
        global 
    $db;
        
    $result_set $db->query($sql);
        
    $object_array = array();
        while (
    $row $db->fetch_array($result_set)) {
          
    $object_array[] = self::instantiate($row);
        }
        return 
    $object_array;
      }


        private static function 
    instantiate($record) {
            
    // Could check that $record exists and is an array
        
    $object = new self;
            
            foreach(
    $record as $attribute=>$value){
              if(
    $object->has_attribute($attribute)) {
                
    $object->$attribute $value;
              }
            }
            return 
    $object;
        }

        
        private function 
    has_attribute($attribute) {
          
    // get_object_vars returns an associative array with all attributes 
          // (incl. private ones!) as the keys and their current values as the value
          
    $object_vars get_object_vars($this);
          
    // We don't care about the value, we just want to know if the key exists
          // Will return true or false
          
    return array_key_exists($attribute$object_vars);
        }
    }


    $myuser=user::find_by_id(2);
    echo 
    $myuser->lname

    مشکل من مربوط به خطه آخره

    echo $myuser->lname;
    من متوجه نمیشم چطور myuser میتونه این کارو بکنه مگه نباید اول یه نمونه از رویه کلاس بسازه تا بتونه اینطوری به lname دسترسی داشته باشه
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۳ ۰۱:۴۹ عصر، توسط Heretic.)
    ۱۳۸۸ آبان ۳ ۰۱:۴۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    parvane آفلاین
    عضو مهم
    ****

    ارسال‌ها: 352
    تاریخ عضویت: ۱۳۸۷ دي ۸
    اعتبار: 12
    تشکرها : 590
    ( 424 تشکر در 242 ارسال )
    ارسال: #2
    RE: کمک برای درک یک کد
    در متد instantiate این قسمت رو در نظر بگیرید:
    کد PHP:
    $object = new self
    یک شی از کلاس ساخته می شه

    فراخوانی متد instantiate در متد find_by_sql انجام می شه
    متد find_by_sql هم در find_by_id فراخوانی شده
    ۱۳۸۸ آبان ۳ ۰۴:۰۴ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : Heretic
    Alimokhlesi آفلاین
    مدیر کل
    **********

    ارسال‌ها: 457
    تاریخ عضویت: ۱۳۸۷ آذر ۲۵
    اعتبار: 13
    تشکرها : 601
    ( 1126 تشکر در 412 ارسال )
    ارسال: #3
    RE: کمک برای درک یک کد
    با عرض سلام و خوش آمود گویی به شما دوست عزیز و گرامی
    امید وارم مجموعه برنامه های سازمانی این سایت به شما در موفقیت های علمی تون کمک کنه
    -------------------------------------------------------------------
    کدتون جای سئوال داره:
    چرا متد های پابلیک و استاتیک کردین؟
    متد find_by_id در نهایت چه چیز هایی از چه انواعی برمی گردونه ؟
    این $object = new self; دیگه چرا؟ یعنی راه دیگه ای نبود؟ اصلا از چه الگویی دارید استفاده می کنید؟
    __________________________________________________________________________
    علم تاج افتخار دنیا و یادگار پس از مرگ است
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۳ ۰۴:۱۱ عصر، توسط Alimokhlesi.)
    ۱۳۸۸ آبان ۳ ۰۴:۰۹ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    Heretic آفلاین
    عضو جدید
    **

    ارسال‌ها: 6
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۴
    اعتبار: 0
    تشکرها : 4
    ( 0 تشکر در 0 ارسال )
    ارسال: #4
    RE: کمک برای درک یک کد
    ممنون

    اینطوری که من متوجه شدم در واقع یک شی برگردونده میشه به myuser نه یک ارایه برایه همین میتونه به این شکل عمل کنه

    با تشکر از ادمین عزیز
    در مورد سوال اولتون برایه این استاتیک کردم که بتونم بدونه داشتن instance متد رو فراخوانی کنم فکر نمیکنم چندان تفاوتی داشته باشه
    متد find_by_id کارش اینه که یه یوزر رو بر اساس id به کمک کلاس db که فعلا تو این صفحه نیست پیدا میکنه و
    کد PHP:
    public $id;
        public 
    $username;
        public 
    $password;
        public 
    $name;
        public 
    $lname
    رو مقدار دهی میکنه
    و سپس یک شی رو بر میگردونه که همه اون ویژگی ها رو داره
    (شرمنده رفرنس من انگلیسیه معادل برخی کلمات فارسی رو ممکنه بی ربط گفته باشم )

    در مورد سوال سومتون هم میخایم وقتی یوزری با متد find_by_id پیدا شد بتونیم به همه ویژگی اون یوزر که در بالا گفته شد دسترسی داشته باشیم بنابراین شی رو ایجاد کرده و وِیژگی ها رو بر اساس ویژگی های پیدا شده در دیتابیس مقدار دهی میکنیم

    در پایان بابا من ننوشتم اینو Tongue یعنی نوشتم ولی بر اساس راهنمایی مرجع وفعلا هرچی اون بگه ما هم انجام میدیم تا بعدا با روش های دیگه آشنا بشم
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۳ ۰۵:۲۸ عصر، توسط Heretic.)
    ۱۳۸۸ آبان ۳ ۰۵:۲۷ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Alimokhlesi آفلاین
    مدیر کل
    **********

    ارسال‌ها: 457
    تاریخ عضویت: ۱۳۸۷ آذر ۲۵
    اعتبار: 13
    تشکرها : 601
    ( 1126 تشکر در 412 ارسال )
    ارسال: #5
    RE: کمک برای درک یک کد
    این درست نیست که شما از یک کلاس تو خودش آبجکت سلف بگیرید و برگردونید.
    به جای این کار نی تونید از دوتا کلاس استفاده کنید. یکی یا اینکه خصوسا رو مقدار دهی کنید و بعد ازشون استفاده کنید
    استاتیک بودن با نبود خیلی فرق دارن
    در مورد اینکه کدوخودتون ننوشتید هم باید بگم به به به به Big Grin
    __________________________________________________________________________
    علم تاج افتخار دنیا و یادگار پس از مرگ است
    ۱۳۸۸ آبان ۳ ۰۵:۳۲ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    Heretic آفلاین
    عضو جدید
    **

    ارسال‌ها: 6
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۴
    اعتبار: 0
    تشکرها : 4
    ( 0 تشکر در 0 ارسال )
    ارسال: #6
    RE: کمک برای درک یک کد
    اقا این همه به به زیاده یکمشو فعلا نگهدارید برایه بعدا که بیشتر درخشیدم Wink

    اگه ممکنه مشکل این روش رو که تو خودش آبجکت سلف بگیره رو بگید آخه اینطوری ساده تر و خلاصه تره
    ۱۳۸۸ آبان ۳ ۰۶:۲۷ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Alimokhlesi آفلاین
    مدیر کل
    **********

    ارسال‌ها: 457
    تاریخ عضویت: ۱۳۸۷ آذر ۲۵
    اعتبار: 13
    تشکرها : 601
    ( 1126 تشکر در 412 ارسال )
    ارسال: #7
    RE: کمک برای درک یک کد
    ابجکت سلف می تونه استک اور فلو داشته باشه . دور داشته باشه و....
    توصیه میشه از ازه های استاندارد دیگه استفاده کنید Smile
    __________________________________________________________________________
    علم تاج افتخار دنیا و یادگار پس از مرگ است
    ۱۳۸۸ آبان ۳ ۰۶:۴۰ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : Heretic
    Heretic آفلاین
    عضو جدید
    **

    ارسال‌ها: 6
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۴
    اعتبار: 0
    تشکرها : 4
    ( 0 تشکر در 0 ارسال )
    ارسال: #8
    RE: کمک برای درک یک کد
    یه سوال دیگه چون به همین مربوطه گفتم همینجا بپرسم
    من دارم یه فروشگاه رو که قبلا نوشتم با روش شی گرا باز نویسی میکنم
    تا حالا برای یوزر و دیتابیس و سشن ها کلاس ساختم
    اخرین مسئله که مونده مربوط به کالا هاست

    همونطور که تویه نمونه کد بالا گزاشتم یوزر دارایه ویژگی هایی مثل NAME , PASS , ..... هستش برایه همه یوزر ها یکسان مشخص هستن و برای هر یوزر بهشون مقدار میدیم و ازشون استفاده میکنیم
    اما کالایی یه سری ویژگی ها داره مثل نام و قیمت و .... که از قبل مشخصا و بین همه مشترکه ولی یه تعداد ویژگی هاش از قبل معلوم نیست وممکنه یه کالا بیشتر از کالای دیگه داشته باشه اونها رو چه باید کرد
    البته کاره زیادی باهاشون ندارم فقط برای پرینت و ادیت کردن به اینها نیاز دارم
    ولی به هر حال باید اول توی کلاس مقدار دهی بشن تا بعد بشه بلا سرشون اورد
    دوستان حرفه ای لطفا راهنمایی کنن معمولا در این مواقع روش کار چجوریه ؟
    میشه از نوع آرایه ساخت و ریختشو تو اون ؟
    (آخرین ویرایش در این ارسال: ۱۳۸۸ آبان ۱۱ ۰۹:۱۳ عصر، توسط Heretic.)
    ۱۳۸۸ آبان ۱۱ ۰۹:۱۲ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    bitanaz آفلاین
    عضو جدید
    **

    ارسال‌ها: 41
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۵
    اعتبار: 3
    تشکرها : 36
    ( 17 تشکر در 11 ارسال )
    ارسال: #9
    RE: کمک برای درک یک کد
    نه فكر نكنم بشه
    ۱۳۸۸ آبان ۱۷ ۰۹:۳۸ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS