mosi2007
سه شنبه 05 اردیبهشت 1391, 01:14 صبح
سلام دوستان توی همین فروم خوندم که اگه از __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
<?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