PHP面向对象构造和析构函数

一、构造函数

用来生成对象的函数

	<?php
	class Ren{
		public $name;
		public $sex;//性别是人一出生就知道的,可以用构造函数来定义
		/*public function Ren(){
		} */
		//构造函数不常用
		public function __construct(){
		}//构造函数常用
	}
    ?>

1、构造函数写法特殊

函数名和类名保持一直或者直接用__construct         ( __双下划线)

2、执行特殊

new的时候自动执行不用调用

造对象的时候执行

	<?php
	class Ren{
		public $name;
		public $sex;
		public function __construct($sex){
			$this->sex = $sex;
			echo "测试一下";
		}
	}
	$r = new Ren("男");
	$r->name = "张三";
	var_dump($r);
    ?>

二、析构函数

对象销毁前调用,因为PHP等语言都有垃圾回收机制所以一般用不到

	<?php
	class Ren{
		public $name;
		public $sex;
		public function __construct($sex){
			$this->sex = $sex;
		}
		public function __destruct(){
			echo "销毁";
		}//执行完name后没有可执行的 会自动销毁内容
	}
	$r = new Ren("男");
	$r->name = "张三";
    ?>

销毁

实例

<?php
//设置当前页面编码格式为gbk
header("Content-type:text/html; charset=gbk");

class hero{
	public $name; //名字
	public $blood; //血量
	public $attack; //攻击力

	//放技能的方法
	public function jineng(){
		$arr = array(
			array(50,"隔山打牛"),
			array(60,"降龙十八掌"),
			array(45,"九阳神功"),
			array(20,"葵花宝典"),
			array(70,"六脉神剑")
		);
		$gs = count($arr);

		$sy = rand(0,$gs-1);
		echo "{$this->name}使用了{$arr[$sy][1]}\n";
		return $arr[$sy][0];
	}

	//构造函数
	public function __construct($name,$blood,$gjl){
		$this->name = $name;
		$this->blood = $blood;
		$this->attack = $gjl;
	}
}

//造第一个人
$h1 = new hero("狗蛋",800,15);

//造第二个人
$h2 = new hero("大壮",700,16);

while(true){

	//随机一下,是普攻还是放技能
	$sj1 = rand(0,1);
	$gj = 0;  //本次h1能打掉多少血
	echo "{$h1->name}打{$h2->name}\n";
	if($sj1){
		$gj = $h1->jineng();
	}else{
		$gj = $h1->attack+rand(0,20);
	}
	$h2->blood = $h2->blood-$gj;
	echo "{$h1->name}打掉了{$h2->name}的{$gj}血\n";
	echo "******************************\n";

	$sj2 = rand(0,1);
	$gj2 = 0;  //本次h2能打掉多少血
	echo "{$h2->name}打{$h1->name}\n";
	if($sj2){
		$gj2 = $h2->jineng();
	}else{
		$gj2 = $h2->attack+rand(0,20);
	}
	$h1->blood = $h1->blood-$gj2;
	echo "{$h2->name}打掉了{$h1->name}的{$gj2}血\n";
	echo "******************************\n";

	if($h2->blood<=0){
		echo "{$h1->name}赢了";
		break;
	}else if($h1->blood<=0){
		echo "{$h2->name}赢了";
		break;
	}
	echo "----\n\n\n";
	//休眠
	sleep(3);
}

用cmd运行

原文地址:https://www.cnblogs.com/navyouth/p/8228203.html

时间: 2024-11-13 08:19:33

PHP面向对象构造和析构函数的相关文章

Delphi2010新发现-类的构造和析构函数功能

Delphi2010发布了. 虽然凭着对Delphi的热爱第一时间就安装了,但是现在可能是年纪大了,对新事物缺乏兴趣了.一直都没有仔细研究. 今天有点时间试了一下新功能. 本来C#和Delphi.NET是支持类的构造函数/析构函数的(注意不是实例的构造和析构).也就是在模块初始化/卸载的时候会调用. 这样有很多好处,比如说类的静态变量的初始化什么的都可以在这里做. Delphi For Win32对这方面的需求还不是很大. 第一个原因.历史上旧版Delphi不支持静态变量.只能用Unit的全局变

构造与析构函数与=不能被继承,以及内部类的用法

不是所有的函数都能自动地从基类继承到派生类中的.构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么.所以,在整个层次中的所有的构造函数和析构函数都必须被调用,也就是说,构造函数和析构函数不能被继承.另外,operator= 也不能被继承,因为它完成类似于构造函数的活动. //: NINHERIT.CPP -- Non-inherited functions #include <fstream.h> class root { public: root() {

C++ 的全局构造与析构函数

我们知道一般的C/C++ 的程序是从main函数开始的,然后在main函数结束后程序结束.但是不然,在main函数开始执行前,已经有其他的指令被执行了. 为了程序的顺利执行,首先要初始化执行环境,比如堆分配初始化(malloc, free) ,线程子系统等,这里先提一下:C++ 的全局对象构造函数就是在这一时期被执行的.即C++ 的全局对象构造函数在main 函数之前执行,而C++ 全局对象的析构函数在main函数之后被执行. linux 系统中,一般程序的入口是“ _start ", 这个函数

条款9:绝不要在构造以及析构函数中调用虚函数

在构造以及析构函数期间不要调用virtual函数,因为这类调用从不下降到derived class中.例如说下面这个例子: 1 class Transaction{ 2 public: 3 Transaction(); 4 virtual void logTransactions()s const = 0; 5 //... 6 }; 7 Transaction::Transaction() 8 { 9 //... 10 logTransaction(); 11 } 12 class BuyTra

EC笔记,第二部分:9.不在构造、析构函数中调用虚函数

9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #include <iostream> using namespace std; class cls1{ public: cls1(){ newMake(); }; ~cls1(){ deleteIt(); }; virtual void newMake(){ cout<<"cls1 make"<<endl; } virtual void deleteIt()

绝不在构造和析构函数中调用 virtual 函数

看下面的这段代码,问 print调用的是基类还是派生类的版本? 答案是 基类... 可能大家会很惊讶,print不是virtual function 吗?为什么不是调用派生类的版本呢? 首先,当定义一个派生类的对象的时候, 由于 base class 构造函数的执行更早于 derived class构造函数, 所以当 base class constructor 调用的时候,派生类的成员尚未初始化(说明,这个时候真正的 虚函数表尚未完全初始化). 如果这个时候调用 派生类的函数(可能使用未初始化

27)构造和析构函数

1)为啥有构造函数:  在涉及多线程的代码中,比如你现在实例化一个类,那么 然后紧接着你去 初始化这个对象的某些值, 但是,一旦你的类实例化完了,在你的初始化某些变量这个之间,可能会有别的线程改变了这个对象,那么你在改这个对象的某些变量可能达不到你想要的结果 所以  为了防止  我再实例化类之后,初始化某些变量,这个之间发生问题,我干脆就只要实例化对象,我就也顺带做一些初始化工作,这个就是   构造函数的作用(其实就是数据库的那个加锁的作用) 构造函数一般是  public   因为你实例化类,

关于PHP面向对象中—类的定义与对象的实例化操作以及构造、析构函数的特殊用法

类的定义与对象的实例化操作 <?php //类里面的成员是属于对象的class Hero{    public $name;//成员变量    //成员属性(存在于强类型语言中)    protected $blood;    private $attack;    //成员方法    function skill(){        echo "$this->name<br>control";            }} $s = new Hero();//造

面向对象中的继承、封装、构造与析构函数

构造函数:是一种特殊的方法.主要用来在创建对象时初始化对象,即为对象成员变量赋值初始值,总与new运算符一起使用在创建对象的           语句中.两根下划线开头,construct     作用:为对象成员变量赋值初始值 类的构造方法,是一个魔术方法     * 自动的被调用(可以被内部进行使用并调用)     * 不用申明,相当于默认一个没有任何执行语句的构造函数     * 会自动返回一个当前类的对象     * 一个类中有且只有一个构造函数     * 构造函数可以带参数,通常是给