نمایش نتایج 1 تا 3 از 3

نام تاپیک: class => __destruct

  1. #1

    Question class => __destruct

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

    <?php
    class employee {
    protected $ename;
    protected $sal;
    function __construct($ename, $sal = 100) {
    $this->ename = $ename;
    $this->sal = $sal;
    }function give_raise($amount) {
    $this->sal+= $amount;
    printf("Employee %s got raise of %d dollars\n<br />", $this->ename, $amount);
    printf("New salary is %d dollars\n<br />", $this->sal);
    }
    function __destruct() {
    printf("Good bye, cruel world: EMPLOYEE:%s\n<br />", $this->ename);
    }
    }
    class manager extends employee {
    protected $dept;
    function __construct($ename, $sal, $dept) {
    parent::__construct($ename, $sal);
    $this->dept = $dept;
    }
    function give_raise($amount) {
    parent::give_raise($amount);
    print "This employee is a manager\n<br />";
    }
    function __destruct() {
    printf("Good bye, cruel world: MANAGER:%s\n<br />", $this->ename);
    parent::__destruct();
    }
    } // Class definition ends here.
    $mgr = new manager("Smith", 300, 20);
    $mgr->give_raise(50);
    $emp = new employee("Johnson", 100);
    $emp->give_raise(50);
    ?>


    که خودش تو همون ای بوک خروجیه این کدو نشون داده بود ولی من همین کدو وقتی خروجی میگیرم با هر بار صدا زدن کلاس یه بار هم __destruct اجرا میشه نمیدونم چرا
    خروجی من با این کد

    Good bye, cruel world: MANAGER:Smith
    Good bye, cruel world: EMPLOYEE:Smith
    Employee Smith got raise of 50 dollars
    New salary is 350 dollars
    This employee is a manager
    Good bye, cruel world: EMPLOYEE:Johnson
    Employee Johnson got raise of 50 dollars
    New salary is 150 dollars
    Good bye, cruel world: EMPLOYEE:Johnson
    Good bye, cruel world: MANAGER:Smith
    Good bye, cruel world: EMPLOYEE:Smith


    و این هم خروجی ای بوک


    Employee Smith got raise of 50 dollars
    New salary is 350 dollars
    This employee is a manager
    Employee Johnson got raise of 50 dollars
    New salary is 150 dollars
    Good bye, cruel world: EMPLOYEE:Johnson
    Good bye, cruel world: MANAGER:Smith
    Good bye, cruel world: EMPLOYEE:Smith

  2. #2

    نقل قول: class => __destruct

    سلام

    تابع destruct وقتی اجرا می شود که دیگر که کلاس می خواهد بسته شود و آخرین تابعی است که اجرا می شود ببخشید بخاطر ضیع نمی تونستم همه اش را بخونم اما من مثال ساده تری گذاشتم که به آن نگاه می کنیم:

    class BaseClass {
    function __construct() {
    print "In BaseClass constructor\n<br/>";
    }
    function __destruct() {
    print "In BaseClass destructor\n<br/>";
    }
    }

    class SubClass extends BaseClass {
    function __construct() {
    parent::__construct();
    print "In SubClass constructor\n<br/>";
    }
    function __destruct() {
    parent::__destruct();
    print "In SubClass destructor\n<br/>";
    }
    }

    $obj = new BaseClass();
    $obj = new SubClass();


    خروجی:
    کد HTML:
    In BaseClass constructor 
    In BaseClass constructor 
    In SubClass constructor 
    In BaseClass denstructor 
     In BaseClass denstructor 
    In SubClass denstructor 
    حالا با این دو خط توجه کنید:
    $obj = new BaseClass();
    $obj = new SubClass();
    اولین کلاسی که ساخته شد کلاس baseclass بوده بنابراین تابع construct بیس اجرا می شود و نمایش می دهد:
    کد HTML:
    In BaseClass constructor
    دومین کلاسی که ساخته شد کلاس subclass است بنابراین تابع construct بیس اجرا می شود و نمایش می دهد اما باید دقت کنید یک بار تابع construct والد را قبل از پرینت خودش اجرا می کند بنابراین اول چاپ آنرا انجام داده سپس برای خود انجام می دهد:
    کد HTML:
    In BaseClass constructor 
    In SubClass constructor
    حالا برای DESTRUCT هم مانند construct انجام می شود اول بیس destruct می شود سپس subclass نابود می شود. که در ساب کلاس یک بار دیگر تابع بیس را هم اجرا می کند بنابراین خروجی:
    کد HTML:
    In BaseClass destructor 
     In BaseClass destructor 
    In SubClass destructor
    با امید موفقیت

  3. #3

    نقل قول: class => __destruct

    درست من هم میدونم ولی تو مرورگر من این جوری که ماله شما خروجی داده ماله من نمیده
    خروجی کد شما در مروگر من

    In BaseClass constructor
    In BaseClass destructor
    In BaseClass constructor
    In SubClass constructor
    In BaseClass destructor
    In BaseClass destructor
    In SubClass destructor
    In BaseClass destructor
    In SubClass destructor


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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •