آموزش برنامه نویسی Oop

شروع موضوع توسط hidensoft ‏28 اکتبر 2007 در انجمن مقالات و آموزش‌ها

  1. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    سلام
    از عنوان انتخاب شده معلوم هست که در مورد چی هست ولی من واسه اون دسته از کسانی که به تازگی وارد برنامه نویسی شند توضیح می دم :
    برنامه نویسی شی گرا (OOP مخفف Object Oriented Programming) شیوه ای از برنامه نویسی است که بیشتر بر روی شی کار میکند .
    هر شی دارای توابع و متغیر هایی می باشد که درون شی تعریف می شوند.
    در PHP ما با استفاده از Class اشیا مورد نظر خود را تعریف می کنیم .
    مثال :
    PHP:
    <?php
        class Myclass
        {
            // some code
        }
    ?>
    همونطور که گفتم هر شی دارای یک سری متغیر و توابع می باشد. حالا ما برای شی خودمون یک تابع می سازیم که کلمه PHP رو برای ما چاپ کنه :

    PHP:
    <?php
        class Myclass
        {
            function printphp()
            {
                echo 'php';
            }
        }
    ?>
    حالا این کد رو اجرا می کنیم . ولی خروجی در صفحه مشاهده نمی کنیم ! چرا ؟
    برای اینکه ما باید این شی را در برنامه به یک متغیر نسبت بدهیم . بدین صورت :

    PHP:
    <?php
        class Myclass
        {
            function printphp()
            {
                echo 'php';
            }
        }
       
        $my_var = new Myclass();
    ?>
    همانطور که می بینید توسط new بعد از مساوی نام کلاسی که ساختیم را می نویسیم.
    تا اونجا که من میدونم در PHP 4 یک کپی از این کلاس درون متغیر یا شی قرار می گیره .. اما در PHP 5 فقط یک دستگیره از کلاس به شی ارجا می شود.
    حالا نوبت به استفاده تابع درون کلاس می باشد. برای اینکه به توابع یا متغیر های درون Class دسترسی داشته باشیم باید از پس از نام متغیر از <- استفاده کنیم :

    PHP:
    <?php
        class Myclass
        {
            function printphp()
            {
                echo 'php';
            }
        }
       
        $my_var = new Myclass();
        $my_var->printphp();
    ?>
    پس از تعریف شی در خط 11 اسکریپت به PHP فرمان اجرای تابع ()printphp از Myclass رو میده و پس از اجرای این اسکریپت می بینید که php درون صفحه نمایش داده می شود.

    خیلی ساده بود نه ؟

    حالا یکم سخت ترش می کنیم.
    به کلاسی که ساختیم یک متغیر اضافه می کنیم. بدین صورت :

    PHP:
    <?php
        class Myclass
        {
            public $myname;
           
            function printphp()
            {
                echo 'php';
            }
        }
       
        $my_var = new Myclass();
        $my_var->printphp();
    ?>
    تابع ()printphp رو به نام ()print_my_name تغییر نام می دهیم :

    PHP:
    <?php
        class Myclass
        {
            public $myname;
           
            function print_my_name()
            {
                echo 'php';
            }
        }
       
        $my_var = new Myclass();
        $my_var->print_my_name();
    ?>
    یک تابع جدید با نام ()set_my_name بوجود می آوریم :

    PHP:
    <?php
        class Myclass
        {
            public $myname;
           
            function print_my_name()
            {
                echo 'php';
            }
           
            function set_my_name()
            {
               
            }
        }
       
        $my_var = new Myclass();
        $my_var->print_my_name();
    ?>
    خب حالا یه سوال پیش میاد که ما به متغیر هایی که درون کلاس تعریف می کنیم به چه صورت دسترسی پیدا می کنیم ؟
    جواب خیلی سادست .. همون طور که نام تابع رو صدا زدیم می تونیم بجای نام تابع نام متغیر رو بنویسیم و به متغیر درون کلاس دسترسی داشته باشیم.

    PHP:

        $my_var->myname = "ALI"; // می توانید به متغیر بدهید
       
        $x = $my_var->myname; // می توانید مقدار متغیر را درون متغیر دیگری بریزید
     
    ما تاحالا از بیرون کلاس به متغیر ها و توابع دسترسی داشتیم .. اما راهی برای دسترسی از درون کلاس به اشیاء کلاس هست ؟
    بله .. توسط متغیر this$ می توانید به متغیر ها درون یک شی دسترسی داشته باشید و به آنها مقدار بدهید یا مقدار آنها را درون متغیر دیگری قرار دهید یا مقدار آن را مورد مقایسه قرار دهید.
    توی یک مثال ساده توسط this$ به متغیر myname$ مقداری می دهیم :

    PHP:
    <?php
        class Myclass
        {
            public $myname;
           
            function print_my_name()
            {
                echo 'php';
            }
           
            function set_my_name()
            {
                $this->myname = 'Ali';     
            }
        }
       
        $my_var = new Myclass();
        $my_var->print_my_name();
    ?>
    در تابع ()set_my_name توسط this$ به متغیر myname$ مقدار Ali را ارجا دادیم.
    PHP:
    function set_my_name()
            {
                $this->myname = 'Ali';     
            }
    حالا تابع ()print_my_name را با کمک this$ طوری تغییر می دهیم که متغیر myname$ را چاپ کند :

    PHP:
    <?php
        class Myclass
        {
            public $myname;
           
            function print_my_name()
            {
                echo $this->myname;
            }
           
            function set_my_name()
            {
                $this->myname = 'Ali';     
            }
        }
       
        $my_var = new Myclass();
        $my_var->print_my_name();
    ?>
    با اجرای این اسکریپت بازم شما هیچ خروجی نخواهید داشت .. زیرا شما باید ابتدا تابع ()set_my_name را اجرا کنید تا درون متغیر myname$ مقدار Ali قرار بگیرد .. سپس تابع ()print_my_name را اجرا کنید .. پس قبل از دستور اجرای تابع ()print_my_name دستور اجرای تابع ()set_my_name را صادر می کنیم :

    PHP:
    <?php
        class Myclass
        {
            public $myname;
           
            function print_my_name()
            {
                echo $this->myname;
            }
           
            function set_my_name()
            {
                $this->myname = 'Ali';     
            }
        }
       
        $my_var = new Myclass();
        $my_var->set_my_name();
        $my_var->print_my_name();
    ?>
    حالا برای بهتر شدن این کد آخرین تغیرات رو انجام می دهیم در تابع ()set_my_name یک تغییر کوچک می دهیم :

    PHP:
    function set_my_name($name)
            {
                $this->myname = $name;     
            }
    فکر می کنم فهمیدید چیکار کردم ! با تغییرات انجام شده تابع ()set_my_name یک آرگمان اجباری از شما میخواهد و مقدار همون آرگمان رو در خروجی چاپ می کنه پس حالا باید دستور اجرا ی تابع ()set_my_name رو تغییر بدهیم تا رشته ای که به عنوان آرگمان می گیرد را چاپ کند.

    PHP:
    $my_var->set_my_name('Ali');
    این هم اسکریپت نهایی :

    PHP:
    <?php
        class Myclass
        {
            public $myname;
           
            function print_my_name()
            {
                echo $this->myname;
            }
           
            function set_my_name($name)
            {
                $this->myname = $name;     
            }
        }
       
        $my_var = new Myclass();
        $my_var->set_my_name('Ali');
        $my_var->print_my_name();
    ?>
    فایل پیوست شده هم همین اسکریپت هست .

    انشا الله اگر این جلسه مورد استقبال دوستان قرار گرفت در جلسه دوم به بحث در مورد :
    PHP:

    __construct()
    __destruct()
    self::
    parent::
     
    می پردازیم ..

    اگر سوالی در این مورد داشتید بپرسید .. فقط سوالاتی که در همین مورد هستند رو مطرح کنید .



    موفق و پیروز باشید
     

    پیوست ها:

    • OOP1.zip
      اندازه فایل:
      261 بایت
      نمایش ها:
      105
    آخرین ویرایش: ‏28 اکتبر 2007
    نوشته شده توسط hidensoft در ‏28 اکتبر 2007
    sevenbacklink، ammaddah، key12 و 43 نفر دیگر از این ارسال تشکر کرده اند.
  2. yakoza

    yakoza Well-Known Member

    ارسال‌ها:
    742
    تشکر شده:
    381
    امتیاز دستاورد:
    63
    آقا من پایتم عجیب

    خیلی دوست دارم oop رو یاد بگیرم

    ادامه بده
     
    نوشته شده توسط yakoza در ‏28 اکتبر 2007
    mahdi maddahpour از این پست تشکر کرده است.
  3. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    پست آپدیت شد:)
     
    نوشته شده توسط hidensoft در ‏28 اکتبر 2007
    mahdi maddahpour از این پست تشکر کرده است.
  4. siavashmusic

    siavashmusic Active Member

    ارسال‌ها:
    1,509
    تشکر شده:
    609
    امتیاز دستاورد:
    36
    خسته نباشی مدتی بود میخواستم این آموزش رو علم کنم
    حالا که تاپیکش رو ایجاد کردی میتونیم ادامه بدیم
     
    نوشته شده توسط siavashmusic در ‏28 اکتبر 2007
    mahdi maddahpour از این پست تشکر کرده است.
  5. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    خوشحال می شم بقیه دوستان هم کمک کنند
     
    نوشته شده توسط hidensoft در ‏28 اکتبر 2007
    king_net، mahyar13652000 و mahdi maddahpour از این ارسال تشکر کرده اند.
  6. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    آموزش برنامه نویسی oop جلسه دوم

    سلام
    امروز می خوایم در این موارد باهم صحبت کنیم

    PHP:
    __construct()
    __destruct()
    self::
    parent::
    اول در باره هر کدوم توضیح مختصری می دم.

    ()construct__
    تابعی که با این نام باشه هنگام ساختن یک شی از کلاس بطور خود کار اجرا میشه

    ()destruct__
    تابعی که با این نام باشه هنگامی که شما عملیاتتون با شی تموم بشه بطور خود کار اانجام می شه

    ::self
    با این متد می تونید از داخل کلاس یک تابع از کلاس رو صدا بزنید
    ::parent
    این متد به کلاس والد اشاره می کنه .. زمانی که شما یک کلاس رو فرزند کلاس دیگری قرار بدید

    با یک مثال ساده کار رو شروع می کنیم. به کد زیر نگاه کنید

    PHP:
    <?php
    class Myclass {
       function __construct() {
           print "construct";
       }
    }
    $obj = new Myclass();
    ?>
    خروجی
    PHP:
    construct
    همون طور که می بینید با اینکه ما فقط یک شی رو به یک متغیر نسبت دادیم باز هم متد construct__ اجرا شد .
    حالا اگه این تابع construct__ چند تا آرگمان در ابتدا از ما بخواد باید چطوری این آرگمان ها رو مقدار دهی بکنیم ؟
    حالا به کد زیر نگاه کنید

    PHP:
    <?php
    class Myclass {
       function __construct($name) {
           print $name;
       }
    }
    $obj = new Myclass('Ali');
    ?>
    و خروجی :
    PHP:
    Ali
    پس اگر تابع construct__ در ابتدا نیاز به آرگمان داشت می بایست در هنگام تعریف شی آرگمان رو مقدار دهی کرد.
    وگر نه شما با خطایه
    کد (Text):
    Warning: Missing argument 1 for Myclass::__construct(), called in[COLOR="Red"] FILE ADRESS[/COLOR] on line[COLOR="#ff0000"] LINE NUMBER[/COLOR] and defined in[COLOR="#ff0000"] FILE ADRESS[/COLOR] on line [COLOR="#ff0000"]LINE NUMBER[/COLOR]
     
    در PHP 4 شما می تونید بجای استفاده از construct__ از نام کلاس به عنوان نام تابع استفاده کنید و این تابع هم مانند construct __ عمل خواهد کرد.

    PHP:
    <?php
    class Myclass {
       function Myclass($name) {
           print $name;
       }
    }
    $obj = new Myclass('Ali');
    ?>
    باز هم خروجی Ali خواهد بود.
    (این قابلیت در php 5 هم support می شود)

    حالا به این کد نگاه کنید :

    PHP:
    <?php
    class Myclass {
       function Myclass($name) {
            print $name;
       }
       function t_empty(){
            print '$';
       }
       function __destruct(){
            print 'Akbar';
       }
    }
    $obj = new Myclass('Ali');
    ?>
    خروجی :
    PHP:
    AliAkbar
    همون طور که دید باز هم فقط متغیر رو به شی نسبت دادیم ولی پس از پایان اسکریپت تابع destruct__ عمل کرد و خروجی رو تغییر داد . شاید این سوال براتون پیش بیاد که در هر بار استفاده از شی در پایان destruct__ اجرا می شه ؟ جواب منفی هست و با این کد ثابتش می کنیم

    PHP:
    <?php
    class Myclass {
       function Myclass($name) {
            print $name;
       }
       function t_empty(){
            print '$';
       }
       function __destruct(){
            print 'Akbar';
       }
    }
    $obj = new Myclass('Ali');
    $obj->t_empty();
    ?>
    خروجی :
    PHP:
    Ali$Akbar
    اگر هر بار بعد از استفاده از شی destruct__ اجرا می شد باید دوبار Akbar چاپ می شد اما دیدید که این طور نبود.

    حالا به این کد نگاه کنید :

    PHP:
    <?php
    class Myclass {
       function Myclass() {
            self::t_empty();
       }
       function t_empty(){
            print '$';
       }
    }
    $obj = new Myclass('');
    ?>
    خروجی : $
    همون طور که دید ما از داخل تابع Myclass تابع t_empty رو صدا زدیم. شما می تونید با استفاده از این متد به دیگر توابع دسترسی داشته باشید و آنها رو اجرا کنید.

    اما ::parent

    قبل از توضیح parent باید به شما یاد بدم که چطوری یک کلاس رو والد کلاس دیگری قرار بدیم .
    به این کد نگاه کنید :

    PHP:
    <?php
    class A {
        function example() {
            echo " I am parent";
        }
    }

    class B extends A {
        function example() {
            echo "I am Child ";
            parent::example();
        }
    }

    $b = new B;

    $b->example();
    ?>
    همون طور که می بینید ما اینجا 2 کلاس داریم. کلاس B فرزند کلاس A هست. در مثال کاملا واضح هست که توسط extends یک کلاس رو فرزند کلاس دیگری قرار دادیم.
    و توسط متد ::parent تابع example کلاس مادر رو صدا زدیم .
    فکر نمی کنم مطلبی مونده باشه ..

    با آرزوی موفقیت برای شما
     
    نوشته شده توسط hidensoft در ‏31 اکتبر 2007
    ammaddah، seyed Sepehr، king_net و 11 نفر دیگر از این ارسال تشکر کرده اند.
  7. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    پولی مورفیسم (برنامه نویسی سطح بالا)

    سلام
    من نمی دونم چرا به برنامه نویسی Oop اصلا احمیت داده نمی شه ! واسه پیدا کردن یک کار معمولی هم حداقل شما باید Oop بلد باشی .. بریم سر اصل مطلب

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

    پولی مورفیسم

    می شه گفت پیچیده ترین روش برنامه نویسی در مبحث oop بر می گرده به این بخش . با استفاده از این روش می توانید کنترل برنامه را افزایش داده و از تعریف چند آبجکت برای چند کلاس جلوگیری کرد .
    این مثال از صفحه 67 و 68 PHP 5 Power Programming هست .

    PHP:
    class Cat {
        function miau()
        {
            print "miau";
        }
    }
    class Dog {
        function wuff()
        {
            print "wuff";
        }
    }
    function printTheRightSound($obj)
    {
        if ($obj instanceof Cat)
        {
            $obj->miau();
        }
        else if ($obj instanceof Dog)
        {
            $obj->wuff();
        }
        else
        {
            print "Error: Passed wrong kind of object";
        }
        print "\n";
    }
    printTheRightSound(new Cat());
    printTheRightSound(new Dog());


    /*
    خروجی :

        miau
        wuff
    */

     
    جالب بود نه ؟

    عملکرد برنامه :

    دو کلاس یکی با نام Cat و دیگری با نام Dog وجود دارد . تابع printTheRightSound با استفاده از پولی مورفیسم به دنبال کلاس مورد نظر می گردد و تابع موجود در کلاس را صدا می زند .

    ولی یک اشکال در این روش وجود دارد .. اگر بخواهیم چند صدا از دیگر حیوانات اضافه کنیم باید بدنه Else If را گسترش بدهیم که این روش خوانایی برنامه را پایین می آورد .. راه حل جالبی برای این کار در PHP وجود دارد . آن هم استفاده از توارث است .

    این بار یک کلاس با نام Animal به برنامه اضافه می کنیم. به این کد با دقت نگاه کنید :

    PHP:
    class Animal {
        function makeSound()
        {
            print "Error: This method should be re-implemented in the children";
        }
    }
    class Cat extends Animal {
        function makeSound()
        {
            print "miau";
        }
    }
    class Dog extends Animal {
        function makeSound()
        {
            print "wuff";
        }
    }
    function printTheRightSound($obj)
    {
        if ($obj instanceof Animal)
        {
            $obj->makeSound();
        }
        else
        {
            print "Error: Passed wrong kind of object";
        }
        print "\n";
    }
    printTheRightSound(new Cat());
    printTheRightSound(new Dog());

    /*
    خروجی :

        miau
        wuff
    */
    خب همونطور که دیدید مشکل گسترش بدنه Else If هم حل شد .
    نیاز به توضیح خاصی نیست (اینجور که فکر می کنم). در صورت اینکه سوالی بود همینجا بپرسید (پیام خصوصی نفرستید :wink:).
     
    آخرین ویرایش: ‏24 نوامبر 2007
    نوشته شده توسط hidensoft در ‏24 نوامبر 2007
    seyed Sepehr، king_net، hpsarvari و 8 نفر دیگر از این ارسال تشکر کرده اند.
  8. vaheb

    vaheb Member

    ارسال‌ها:
    95
    تشکر شده:
    6
    امتیاز دستاورد:
    6
    مرسی ادامه نداره ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
     
    نوشته شده توسط vaheb در ‏4 دسامبر 2007
  9. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    تا مطلب به یک مطلب جامع تبدیل بشه ادامه خواهد داشت .

    چون من یکم درگیر مسائل کاری هستم .. نمی رسم که هر روز یک پست جدید بدم ..

    موفق باشید
     
    آخرین ویرایش: ‏5 دسامبر 2007
    نوشته شده توسط hidensoft در ‏5 دسامبر 2007
    king_net و 3dsmax از این پست تشکر کرده اند.
  10. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    ساخت یک موترو تمپلت با Oop

    سلام
    دوستانی که بحث رو دنبال کردند دیگه حالا آمدگی پروژه های خیلی بزرگ تر رو دارند.
    با یک تمپلت انجین کار رو شروع می کنیم.
    زنگ تفریح
    این موتور تمپلت خیلی سادست پس زیاد خوشحال نشید و فردا برید یه smrty برا خودتون بسازید و پس فردا هم یک PHP جدید :D :wink:
    ابتدا به کد مربوط به فایل کلاس اصلی نگاه کنید.
    PHP:
    <?php
    class template
    {
        var $tpl_vars;
       
        function template()
        {
            $this->tpl_vars = array();
        }

        function assign($var_array)
        {
           
            if (!is_array($var_array))
            {
                die('template::assign() - $var_array must be an array.');
            }
            $this->tpl_vars = array_merge($this->tpl_vars, $var_array);
        }

        function parse($tpl_file)
        {

            if (!is_file($tpl_file))
            {
                die('template::parse() - "' . $tpl_file . '" does not exist or is not a file.');
            }
            $tpl_content = file_get_contents($tpl_file);

            foreach ($this->tpl_vars AS $var => $content)
            {
                $tpl_content = str_replace('{' . $var . '}', $content, $tpl_content);
            }
            return $tpl_content;
        }

        function display($tpl_file)
        {
            echo $this->parse($tpl_file);
        }
    }
    ?>
    این فایل آموزش استفاده از کلاس :

    PHP:
    <?php

    require_once('tpl.class.php');
    $tpl =& new template();
    $tpl->assign(array(
        'title'   => 'Simple Template Engine Test',
        'content' => 'This is a test of the <a href="http://www.php.net">Simple Template Engine</a>'
    ));
    $tpl->display('example.tpl');

    ?>
    این هم فایل example.tpl

    PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>{title}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>

    <body>

    <p>{content}</p>

    </body>
    </html>
    عملکرد کلاس

    3 تا تابع اصلی داره این کلاس
    کد (Text):
    function assign($var_array)
    این تابع کار مقدار دهی رو انجام می ده . بهتر بگم ذخیره مقدار ها
    اول از همه چک می کنه که ورودی تابع یک آرایه باشه .. در غیر این صورت خطا صورت می گیره
    سپس متغیر جدید با متغیر های قبلی ادقام می شوند. در صورت وجود ابهام در مورد عملکرد array_merge به اینجا نگاهی بی اندازید.

    کد (Text):
    function parse($tpl_file)
    این تابع کار اصلی رو انجام می ده ، یعنی باید مقدار متغیر ها رو جایگذین کنه .
    ابتدا بررسی می کنه که آیا فایلی که آدرس داده شده موجو هست یا خیر. در صورتی که وجود نداشته باشه خطا صادر می شه .
    در خط بعد توسط تابع file_get_contents تمامی اطلاعات موجود در فایل مورد نظر بصورت استرینگ به متغیر tpl_content$ داده می شود. در صورت وجود ابهام در مورد عملکرد تابع file_get_contents به اینجا نگاهی بی اندازید.
    سپس توسط یک foreach ساده و با کمک تابع str_replace مقدار متغیر ها جایگذین نام متغیر ها می شوند.
    در صورت وجود ابهام در مورد عملکرد تابع str_replace به اینجا نگاهی بی اندازید.
    در صورت وجود ابهام در مورد عملکرد foreach به اینجا نگاهی بی اندازید

    کد (Text):
    function display($tpl_file)
    این تابع هم وظیفه نمایش اطلاعات رو به عهده داره.

    عملکرد فایل آموزش استفاده از کلاس

    ابتدا فایل کلاس رو صدا زده . سپس یک شی رو به کلاس نسبت داده . سپس یک آرایه رو در موتور تمپلت ذخیره کرده . با استفاده از تابع Display فایل رو نمایش داده .

    فکر نمی کنم موضوع مبهمی مونده باشه .. موفق باشید.
     
    آخرین ویرایش: ‏6 دسامبر 2007
    نوشته شده توسط hidensoft در ‏6 دسامبر 2007
    iron30، seyed Sepehr، king_net و 10 نفر دیگر از این ارسال تشکر کرده اند.
  11. vaheb

    vaheb Member

    ارسال‌ها:
    95
    تشکر شده:
    6
    امتیاز دستاورد:
    6
    پیشنهاد می کنم در مورد کرل و سوکت هم این آموزش رو بذارین !
     
    نوشته شده توسط vaheb در ‏6 دسامبر 2007
    atazin از این پست تشکر کرده است.
  12. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    این تاپیک رو به یه جایی برسونم چشم .
     
    نوشته شده توسط hidensoft در ‏6 دسامبر 2007
  13. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    خوشبختانه دوستان زیادی به استفاده از Oop تشویق شدن و دارن روش کار می کنند .
    قدم بعدی ساخت یک وبلاگ هست که در ابتدا هیچ امکاناتی نداره ولی در ادامه می خوایم گسترشش بدیم تا دوستان با مفاهیم Mvc .. طراحی دیتا بیس .. منطق کلی Oop .. بیشتر آشنا بشوند .
    موفق باشید
     
    نوشته شده توسط hidensoft در ‏17 دسامبر 2007
    seyed Sepehr، atazin و zoghal از این ارسال تشکر کرده اند.
  14. yakoza

    yakoza Well-Known Member

    ارسال‌ها:
    742
    تشکر شده:
    381
    امتیاز دستاورد:
    63
    بابا ایول
    کارت درسته به خدا

    منو که میشناسی (matrys200)
     
    نوشته شده توسط yakoza در ‏17 دسامبر 2007
  15. mahdi maddahpour

    mahdi maddahpour New Member

    ارسال‌ها:
    10
    تشکر شده:
    0
    امتیاز دستاورد:
    1
    با تشکر از مطالبتون
     
    نوشته شده توسط mahdi maddahpour در ‏30 دسامبر 2007
  16. Goroop.ir

    Goroop.ir Member

    ارسال‌ها:
    254
    تشکر شده:
    47
    امتیاز دستاورد:
    16
    اقا خیلی ممنون که این اموزش رو گزاشتید .

    میخاستم بدونم که دیگه اموزش در باره ی O0p ندارید ؟

    ما همچنان منتظر خواهیم ماند ! ! ! ! ! (-:
     
    نوشته شده توسط Goroop.ir در ‏5 ژانویه 2008
  17. hidensoft

    hidensoft Member

    ارسال‌ها:
    604
    تشکر شده:
    378
    امتیاز دستاورد:
    16
    متاسفانه يا خوشبختانه فعلا خيلي سرم شلوغه .. انشا الله بعد از امتحانات ترم ..
    موفق باشيد
     
    نوشته شده توسط hidensoft در ‏6 ژانویه 2008
  18. BehrouzPc

    BehrouzPc پــــادشــاه فــلــــش

    ارسال‌ها:
    1,909
    تشکر شده:
    3,510
    امتیاز دستاورد:
    113
    خوب ایجا میبایست به ÷رنت ها وسلف ها پرداخته بشه و بعد در باره عملگر instanceof و بعد کلاس و متدهای انتزاعی abstract که اگه وقت کنم آماده می کنم به زودی در ادامه را این دوست عزیز کار می کنیم
     
    نوشته شده توسط BehrouzPc در ‏12 ژانویه 2008
    hidensoft از این پست تشکر کرده است.
  19. vizz666

    vizz666 Member

    ارسال‌ها:
    123
    تشکر شده:
    37
    امتیاز دستاورد:
    16
    -
     
    آخرین ویرایش: ‏9 ژوئن 2010
    نوشته شده توسط vizz666 در ‏12 ژانویه 2008
    hidensoft از این پست تشکر کرده است.
  20. justpersian

    justpersian Member

    ارسال‌ها:
    162
    تشکر شده:
    96
    امتیاز دستاورد:
    16
    سلام .
    من شدیدا علاقه به یادگیری OOP دارم !
    تا الان همه آموزش ها رو دنبال کردم ولی تو قسمت برنامه نویسی سطح بالا گیر کردم !

    تو این کد :
    PHP:

    class Animal {
        function makeSound()
        {
            print "Error: This method should be re-implemented in the children";
        }
    }
    class Cat extends Animal {
        function makeSound()
        {
            print "miau";
        }
    }
    class Dog extends Animal {
        function makeSound()
        {
            print "wuff";
        }
    }
    function printTheRightSound($obj)
    {
        if ($obj instanceof Animal)
        {
            $obj->makeSound();
        }
        else
        {
            print "Error: Passed wrong kind of object";
        }
        print "\n";
    }
    printTheRightSound(new Cat());
    printTheRightSound(new Dog());

    /*
    خروجی :

        miau
        wuff
    */
     
     
    من اینجا رو گرفتم که کلاس های Cat و Dog فرزند Animal شدن
    ولی چرا توی if تابع makeSound صدا زده شد ؟
    یعنی من کلا از if به بعد رو نگرفتم !
    و یکی دیگه اینکه instanceof چک می کنه که کلاس مورد نظر وجود داره یا نه ؟
    ممنون میشم توضیحی مختصر و مفید بدید
    با تشکر .
     
    آخرین ویرایش: ‏17 ژانویه 2008
    نوشته شده توسط justpersian در ‏17 ژانویه 2008
    atazin از این پست تشکر کرده است.

به اشتراک بگذارید