PHP对象祥解(全)传智播客听客笔记(精)
传智播客php培训7

北京传智播客教育
—高级软件人才实作培训专家! php面向对象编程—三大特征
■
主讲:韩顺平
方法重写/方法覆盖(override)
既然子类可以继承父类的属性和方法,这样可以提高代码的复用性,这个 很好,可以问题来了,假设现在我要求大家写三个类 猫猫,狗狗,猪猪.我们 知道这三个东东都是动物,动物必然存在相同的特点。根据类的抽象特征, 我们可以把它们的相同点提取出来,形成一个父类 Animal,然后继承 [extend4.php]
北京传智播客教育
—高级软件人才实作培训专家! php面向对象编程—三大特征
■
主讲:韩顺平
继承--为什么有?
一个小问题,还是看个程序(extend1.php)
北京传智播客教育
—高级软件人才实作培训专家! php面向对象编程—三大特征
■
主讲:韩顺平
php中有以下魔术函数: __set __get __construct __destruct __call __toString __clone __sleep __wakeup __isset __unset __autoload php中有以下魔术常量(这个后面讲常量的时候说): __LINE__ , __FILE__ ,__FUNCTION__ , __CLASS__ ,__METHOD__
北京传智播客教育
—高级软件人才实作培训专家! php面向对象编程—三大特征
■
主讲:韩顺平
继承—细节讨论
①子类最多只能继承一个父类(指直接继承) ②子类可以继承其父类(或者超类)的 public ,protected修饰的变 量(属性) 和 函数(方法). [回头说前面的访问修饰符] ③在创建某个子类对象时,默认情况下不会自动调用其父类的 构造函数,这点与java是不一样的。[举例] ④如果在子类中需要访问其父类的方法(构造方法/成员方法 方 法的访问修饰符是public/protected),可以使用父类::方法名 (或者 parent::方法名) 来完成。[举例] ⑤如果子类(派生类)中的方法和父类(基类)方法相同,我们称为 方法重写/方法覆盖]。(后面详讲 php面向对象编程—三大特征
php重要知识点总结(PHP网络开发必背)

PHP网站开发必用知识点总结,函数一览,开发必背魔术方法__construct()当实例化一个对象的时候,这个对象的这个方法首先被调用。
__destruct() 当删除一个对象或对象操作终止的时候,调用该方法。
__get()当试图读取一个并不存在的属性的时候被调用。
__set()当试图向一个并不存在的属性写入值的时候被调用。
__call() 当试图调用一个对象并不存在的方法时,调用该方法。
__toString()当打印一个对象的时候被调用__clone() 当对象被克隆时,被调用__isset()__unset()__autoload($classname)__sleep()__wakeup()系统常量__FILE__ 当前文件名__LINE__ 当前行数__FUNCTION__ 当前函数名__CLASS__ 当前类名__METHOD__ 当前对象的方法名PHP_OS 当前系统PHP_VERSION php版本DIRECTORY_SEPARATOR 根据系统决定目录的分隔符/\PATH_SEPARATOR 根据系统决定环境变量的目录列表分隔符; :E_ERROR 1E_W ARNING 2E_PARSE 4E_NOTICE 8M_PI 3。
141592$_SERVER$_ENV 执行环境提交至脚本的变量$_GET$_POST$_REQUEST$_FILES$_COOKIE$_SESSION$_GLOBALS输出echo //Output one or more stringsprint //Output a stringprint_r() //打印关于变量的易于理解的信息。
var_dump() //打印变量的相关信息var_export()//输出或返回一个变量的字符串表示printf("%。
1f",$num) //Output a formatted stringsprintf() //Return a formatted string编码转换string mb_convert_encoding (string $str , string $to_encoding [,mixed $from_encoding ] )iconv();时间date_default_timezone_set("PRC");date(”Y—m—d H:i:s”);time();date(”Y—m-d H:i:s”,time()+3600)ini_set('date.timezone’, 'PRC');msec sec microtime()以秒返回时间戳explode(' ’,microtime())错误处理@1/0error_reporting(E_ALL) 显示所有错误error_reporting(0)trigger_error(”Cannot divide by zero", E_USER_ERROR);try{throw new Exception(”执行失败");}catch (Exception $ex){echo $ex;}字符串处理string trim(”eee ") trim (’ffffe’,’e’) //ltrim rtrimarray explode(".", ”fff.ff。
Thinkphp中的RABC使用(传智播客)

ThinkPHP中的RBAC北京传智播客——吴英雷TP在包中提供了一个叫RBAC的类,这个类中就是将来检查权限的代码。
TP中提供了一种RBAC的实现思路和一部分代码,我们项目还需要自己完成另一部分。
TP中提供的部分是:1.建表的思路权限表:角色表角色权限表(一个角色所拥有的权限存在这个表中):比如说1这个角色拥有1,2,3这三个权限:role_id node_id level1 1 11 2 21 3 3管理员表(自己建)管理员所在角色表(一个管理员可以同时属于多个角色,如:1管理员同时属于1,2两个角色:role_id user_id1 12 12.检查一个管理员是否有某个权限的代码(读这些表的代码)TP中的rbac类中提供了哪几个方法:说明:这个类中所有的方法都是静态的,那么就是说将来用时不需要new 这个类的对象,如果要调用一个方法直接:\Think\Rbac:方法名();a.authenticate($where):查询一个管理员的详细信息b.saveAccessList($userId):取出一个管理员所有的权限并存到SESSION中c.checkAccess:当前这个操作是否需要验证权限,因为我们可以设置哪些模块不需要验证d.checkLogin:判断当前管理员有没有登录e.AccessDecision(*):根据数据库中的数据验证当前用户有没有操作当前方法的权限,执行任何操作之前先调用这个方法f.getAccessList:根据管理员的ID查询数据库取出所有的权限i.原理:1.先取出一个管理员能访问的所有的模块是什么b)再循环所有可以访问的控制器:判断如果控制器叫PUBLIC那么所有的直接可以访问c)再循环所有非PUBLIC的控制器,取出这个控制器中所有可以访问的方法说明2:如果要用这个类还需要在配置文件中添加几个配置项:ER_AUTH_MODEL : 管理员模块的名字,如:User实际操作:如何实现TP中的验证:只需在任何操作之前先调用AccessDecision方法即可。
php面向对象讲解笔记

目录面向对象编程思想 (4)面向对象的基本操作 (5)基本概念 (5)基本语法 (6)声明类,class (6)实例化类得到对象,new (6)操作对象 (8)构造方法,__construct() (9)析构方法,__destruct (12)类的静态成员,static (18)声明 (20)访问 (20)注意 (22)类常量,const (23)定义 (23)访问 (24)总结 (24)继承,extends (25)定义 (26)语法 (26)单继承 (26)instanceof,是否是某类实例 (27)重写,override (28)parent,父类 (29)$this的确定 (30)访问修饰限定符,public,protected,private (31)public (32)protected (32)private (33)注意 (33)冒泡排序 (35)final类,final方法 (36)final类 (36)final方法 (37)抽象类,abstract类 (37)不能实例化对象 (38)只能被继承 (38)使用意义 (39)接口结构,interface (39)多实现 (41)接口可以定义常量 (41)类文件的载入-自动加载机制 (42)自动加载机制 (43)序列化,反序列化 (44)序列化,serialize (46)反序列化,unserialize (46)对象的序列化与反序列化 (47)对象的拷贝 (50)对象的克隆 (50)单例模式 (51)解决步骤,三私一共 (52)在项目的设计层面解决单例的问题 (54)重载 (54)属性重载的魔术方法 (55)__set(); (55)__get(); (56)__unset() (56)__isset(); (57)方法重载的魔术方法 (58)__call() (58)static __callStatic() (59)魔术方法,magic method (59)__invoke() (60)__toString() (61)静态延迟绑定,static (62)参数类型约束 (63)对象的遍历 (64)简单的遍历,foreach (64)自定义遍历,iterator,迭代器接口 (64)常用的对象,类函数 (67)魔术常量 (68)面向对象的特征 (69)快速排序 (69)面向对象编程思想编程思想,面向过程,面向对象!例如完成学生报名系统!1,学生报到。
传智播客:PHP数据库00-基础知识(精)

传智播客:PHP数据库00-基础知识数据库课程体系在PHP阶段,将数据库分为三个阶段:基础阶段:mysql数据库的基本操作(增删改查, 以及一些高级操作(视图, 触发器,函数,存储过程等, 和PHP操作mysql数据库优化阶段: 如何提高数据库效率, 如索引, 分表等部署阶段: 如何搭建真实的环境系统, 如服务器集群, 负载均衡数据库基础1. 什么是数据库?数据库: database, 存储数据的仓库数据库: 高效的存储和处理数据的介质(介质主要是两种: 磁盘和内存2. 数据库的分类?数据库基于存储介质的不同: 进行了分类,分为两类: 关系型数据库(SQL和非关系型数据库(NoSQL: Not Only SQL, 不是关系型的数据库都叫做非关系型数据库3. 不同的数据库阵营中的产品有哪些?关系型数据库大型: Oracle, DB2中型: SQL-SERVER, Mysql等小型: access等非关系型数据库: memcached, mongodb, redis(同步到磁盘4. 两种数据库阵营的区别?关系型数据库: 安全(保存磁盘基本不可能丢失, 容易理解, 比较浪费空间(二维表非关系型数据库: 效率高, 不安全(断电丢失关系型数据库1. 什么是关系型数据库?关系型数据库: 是一种建立在关系模型(数学模型上的数据库.关系模型: 一种所谓建立在关系上的模型. 关系模型包含三个方面:数据结构: 数据存储的问题, 二维表(有行和列操作指令集合: 所有SQL语句完整性约束: 表内数据约束(字段与字段, 表与表之间约束(外键2. 关系型数据库的设计?关系型数据库: 从需要存储的数据需求中分析, 如果是一类数据(实体应该设计成一张二维表: 表是由表头(字段名: 用来规定数据的名字和数据部分组成(实际存储的数据单元二维表: 行和列表头字段名1 字段名2数据单元数据1 数据2以实际案例来进行处理: 分析一个教学系统, 讲师负责教学, 教学生, 在教室教学生.①找出系统中所存在的实体: 讲师表, 学生表, 班级表②找出实体中应该存在的数据信息讲师: 姓名,性别,年龄,工资学生: 姓名,性别,学号,学科班级: 班级名字, 教室编号关系型数据库: 维护实体内部, 实体与实体之间的联系.实体内部联系: 每个学生都有姓名,性别, 学号,学科信息姓名性别学号学科年龄陈明男Itcast0001 PHP 20陈晶晶女Itcast0002 PHP王威Itcast0003 UI第二行的所有字段, 都是在描述陈明这个学生(内部联系; 第二列只能放性别(内部约束关系型数据库的特点之一: 如果表中对应的某个字段没有值(数据, 但是系统依然要分配空间: 关系型数据库比较浪费空间实体与实体之间的联系: 每个学生肯定属于某个班级, 每个班级一定有多个学生(一对多学生表姓名性别学号学科年龄陈明男Itcast0001 PHP 20陈晶晶女Itcast0002 PHP王威Itcast0003 UI班级表班级名称教室编号PHP0810 B205PHP0710 A203解决方案: 在学生表中增加一个班级字段来指向班级(必须能够唯一的找到一个班级信息姓名性别学号学科年龄班级名称陈明男Itcast0001 PHP 20 PHP0810陈晶晶女Itcast0002 PHP PHP0810王威Itcast0003 UI UI0810学生实体与班级实体的关联关系: 实体与实体之间的关系关键字说明数据库: database数据库系统: DBS(Database System: 是一种虚拟系统, 将多种内容关联起来的称呼DBS = DBMS + DBDBMS: Database Management System, 数据库管理系统, 专门管理数据库DBA: Database Administrator,数据库管理员行/记录: row/record, 本质是一个东西: 都是指表中的一行(一条记录: 行是从结构角度出发,记录是从数据角度出发列/字段: column/field, 本质是一个东西SQLSQL: Structured Query Language, 结构化查询语言(数据以查询为主: 99%是在进行查询操作SQL分为三个部分DDL: Data Definition Language, 数据定义语言, 用来维护存储数据的结构(数据库,表, 代表指令: create, drop, alter等DML: Data Manipulation Language, 数据操作语言, 用来对数据进行操作(数据表中的内容, 代表指令: insert, delete,update等: 其中DML内部又单独进行了一个分类: DQL(Data Query Language: 数据查询语言, 如selectDCL: Data Control Language, 数据控制语言, 主要是负责权限管理(用户, 代表指令: grant,revoke等SQL是关系型数据库的操作指令, SQL是一种约束,但不强制(类似W3C: 不同的数据库产品(如Oracle,mysql可能内部会有一些细微的区别.Mysql数据库Mysql数据库是一种c/s结构的软件: 客户端/服务端, 若想访问服务器必须通过客户端(服务器一直运行, 客户端在需要使用的时候运行.交互方式1. 客户单连接认证: 连接服务器, 认证身份: mysql.exe -hPup2. 客户端发送SQL指令3. 服务器接收SQL指令: 处理SQL指令: 返回操作结果4. 客户端接收结果: 显示结果5. 断开连接(释放资源: 服务器并发限制: exit/quit/\qMysql服务器对象没有办法完全了解服务器内部的内容: 只能粗略的去分析数据库服务器的内部的结构.将mysql服务器内部对象分成了四层: 系统(DBMS -> 数据库(DB -> 数据表(Table -> 字段(field。
PHP对象三个特性祥解(传智播客听课笔记韩顺平)

◆PHP面向对象编程的三大特征1.封装2.继承3.多态◆封装就是把抽象的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法)来操作那么在php中如何实现这种类似的控制呢?不能随便查看人的年龄工资等<?phpclass Person{public $name;private $age;private $salary;function __construct($name,$age,$salary){$this->name=$name;$this->age=$age;$this->salary=$salary;}}//创建一个人$p1=new Person("孙悟空",30,1000);echo $p1->name;?>PHP中提供了三种控制符号1.public 表示全局,类内部,外部和子类都可以访问2.protected 表示受保护的,只有在本类或子类可以访问3.private 表示私有的,只有在本类中访问举例说明:class Person{public $name;protected $age;private $salary;function __construct($name,$age,$salary){$this->name=$name;$this->age=$age;$this->salary=$salary;}//成员方法function showInfo(){//这里说明在本类中可以访问public protected private 修饰的变量echo $this->name."||".$this->age."||".$this->salary;}}//创建一个人$p1=new Person("孙悟空",30,1000);echo $p1->name;?我们现在就想去访问protected变量或者private变量访问控制修饰符1.查看薪水(private)public function getSalary($user,$pass){if($user=="shunping" && $pass=="123"){return $this->salary;}else{return "用户名或密码错误";}}2.修改人的年龄//修改年龄public function setAge($age){if($age>1 && $age<120){$this->age=$age;}else{echo "你输入的年龄不对";}}//查看年龄public function getAge(){return $this->age;}这三个控制修饰符号可以对属性和方法修饰,1.如果一个方法没有访问修饰符,则默认是public2.成员属性一定要有访问修饰符☞成员方法之间也可以互相调用,但是需要使用$this关键字还有一种形式,通过一对__set 和__get方法来使用class A{private $n1;private $n2;private $n3;public function __set($pro_name,$pro_val){$this->pro_name=$pro_val;}public function __get($pro_name){if(isset($pro_name)){return $this->pro_name;}else{return null;}}}$a1=new A();$a1->n1=20;echo $a1->n1;PHP三大特性之继承为什么有???//应用场景开发一套学生管理系统(Pupil,Graduateclass Pupil{public $name;protected $age;protected $grade;public showInfo(){echo $this->name."||".$this->age;}public function testing(){echo "小学生在考试";}}class Graduate{public $name;protected $age;protected $grade;public showInfo(){echo $this->name."||".$this->age;}public function testing(){echo "研究生在考试";}}从上面的代码我们看出,代码的复用性不高,同时也会让管理代码成本更高解决方案——》继承现在我们使用继承对上面的代码进行改写//应用场景开发一套学生管理系统(Pupil,Graduateclass Student{public $name;protected $age;protected $grade;//public function __construct()public function showInfo(){echo $this->name."||".$this->grade;}}class Pupil extends Student{public function testing(){echo "小学生在考试";}}class Graduate extends Student{public function testing(){echo "研究生在考试";}}//创建一个学生$stu1=new Pupil();$stu1->name="小明";$stu1->testing();$stu1->showInfo();$stu2=new Graduate();$stu2->name="大明";$stu2->testing();$stu2->showInfo();//应用场景开发一套学生管理系统(Pupil,Graduate class Student{public $name;protected $age;protected $grade;//public function __construct()public function showInfo(){echo $this->name."||".$this->grade;}}class Pupil extends Student{public function testing(){echo "小学生在考试";}}class Graduate extends Student{public function testing(){echo "研究生在考试";}}//创建一个学生$stu1=new Pupil();$stu1->name="小明";$stu1->testing();$stu1->showInfo();$stu2=new Graduate();$stu2->name="大明";$stu2->testing();$stu2->showInfo();☞从上面的代码我们可以看了:所谓的继承就是一个子类,通过extends父类把父类中的一些(public/protected)属性和(public/protected)方法继承下来继承的基本语法是:Class 类名 extends 父类名{//子类本身特有的,自己需要的属性和方法}讨论细节:1.父类的public protected的属性和方法被继承,private属性和方法没有被继承2.子类最多只能继承一个父类(指直接继承)3.在创建一某个子类对象时,默认情况下不会自动调用其父类的构造函数,这点与java是不一样的。
传智播客-----笔记整理(java基础-----String,StringBuffer,StringBuilde)

这两天一直比较犯迷糊,每天都不知道在忙啥,所以有些断更了,真的是,咳咳,明天就要接手新班了,对我来说是喜忧参半吧,喜的是可以锻炼一下自己的能力,忧的是怕自己做不好,不过还是尽力吧。
大纲:String:1.1String方法1.2String特点1.3 StringBuffer1.4 StringBuilder1.5 Jdk升级的目的1.6 基本数据类型对象包装类1.7基本类型======>字符串1.8 字符串=====>基本类型1.9 整数具备不同的进制体现。
2.0自动拆装箱面试题挨个走一遍吧,Let's go.String:String对象的初始化由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:String s = “abc”;s = “Java语言”;其实按照面向对象的标准语法,其格式应该为:String s = new String(“abc”);s = new String(“Java语言”);只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。
例如String s = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。
其它的构造方法的参数,可以参看String类的API文档。
1.1String方法获取获取字符串中字符的个数(长度)int length();根据位置获取字符char charAt(int index);根据字符获取在字符串中的第一次出现的位置int indexOf(int ch);【因为char类型可以转换成int(对应的是0---2^16),依据ASCII,返回-1时,表示这个字符不存在,此方法也可以判断字符是否存在。
】从指定位置进行ch的查找第一次出现位置int indexOf(int ch,int fromIndex);根据字符串获取在字符串中的第一次出现的位置int indexOf(String str);从指定位置进行ch的查找第一次出现位置int indexOf(String str,int fromIndex)根据字符获取在字符串中的最后一次出现的位置int lastIndexOf(int ch);从指定位置进行ch的查找最后一次出现位置int lastIndexOf(int ch,int fromIndex);根据字符串获取在字符串中的最后一次出现的位置int latindexOf(String str);从指定位置进行ch的查找最后一次出现位置int lastindexOf(String str,int fromIndex);获取字符串中一部分字符串,也叫子串String subString(int beginIndex,int endIndex);【包含begin,但不包含end】String substring(int beginIndex);从beginIndex到最后转换将字符串变成字符串数组(字符串的切割)String [] split(String regex):【里面的条件是一个正则表达式】将字符串变成字符数组char [] toCharArray();将字符串变成字节数组byte [] getBytes();将字符串中的字母转成大小写String toUpperCase();【大写】String toLowerCase();【小写】将字符串中的内容进行替换String replace(char oldch,char newch);String replace(String s1,String s2);将字符串两端的空格去除String trim();将字符串进行连接String concat(String str);判断两个字符串内容是否相同boolean equals(Object obj);【复写Object的方法,所以传递的是Object对象】boolean equalsIgnoreCase(String str);忽略大写比较字符串内容。
PHP对象之抽象和接口(传智播客听课笔记韩顺平)(精)

◆抽象类一个小问题?为什么设计抽象类这个技术?1. 在我们实际开发中,我们可能有这样一种类,是其它类的父类,但它本身并不需要被实例化,主要用途是用于让子类来继承,这样可以达到代码复用,同时利于项目设计者设计类快速入门abstract class Animal{public $name;protected $price;//这个方法不有方法体,这个方法主要是为了让子类去实现abstract function cry(;}class Dog extends Animal{//覆盖function cry({echo "小狗汪汪叫";}}//创建一个子类实例$dog1=new Dog(;$dog1->cry(;使用抽象类的注意事项1. 基本用法Abstract class 类名{//方法//属性}2. 用abstract关键字来修饰一个类时,这个类就叫抽象类3. 用abstract关键字来修饰一个方法,这个方法就叫抽象方法,这里抽象方法就不能有方法体4. 抽象类不能被实例化5. 抽象类不一定要包含abstract方法,同时还可以有实现了的方法6. 一旦类包含了abstract方法,则这个类必须声明为abstract7. 抽象方法不能包含函数体8. 如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法◆接口快速入门案例//使用程序模拟现实情况interface iUsb{public function start(;public function stop(;}// 编写手机类,让它去实现接口//1.当一个类实现了某个接口,则要求该类必须实现这个接口的所有方法class Camera implements iUsb{public function start({echo "相机开始工作";}public function stop({echo "相机停止工作";}}//编写手机类class Phone implements iUsb{ public function start({echo "手机开始工作";}public function stop({echo "手机停止工作";}}$camera1=new Camera(; $camera1->start(; $camera1->stop(;$phone1=new Phone(; $phone1->start(;$phone1->stop(;?>1. 接口的使用基本语法Interface 接口名{//属性//方法}接口中方法都不能有方法体,都是抽象方法 如何去实现这个接口Class 类名 implements 接口名1,接口2.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
◆ PHP面积对象编程
◆构造方法
需求:
在创建一个人对象的进修,就初始化一些变量比如:name age
<?php
class Person{
public $name;
public $age;
//这个就是构造方法
public function __construct()
{
echo "我是构造方法";
}
}
$p1=new Person();
?>
1. 没有返回值
2. 主要作用是完成对新对象的初始化,并不是创建对象
3. 在创建一个类的新对象时,构造方法是被自动调用的
4. 在php5中一个类可以同时有两种形式的构造方法
__construct() 和类名(),当两个都存在的优先调用前面一个方法
5. 一个类中只能有一个构造方法
6. 一旦自定义了一个构造函数,默认的构造函数就被覆盖了,这时在创建对象的时候就要使用自定义的构造函数
7. 构造方法的默认访问修饰符是public
◆ This的理解
系统会给第个对象分配this代表当前对象
<?php
class Person{
public $name;
public $age;
//这个就是构造方法
?> } public function __construct($iname,$iage) { $this->name=$iname; $this-
>age=$iage; echo "我是构造方法"; } public function showInfo() { echo "名字
是:".$this->name; } $p1=new Person("张清",90); $p2=new Person("宋江",33); //echo $p1->name; $p1->showInfo(); $p2->showInfo();
☞ 1.this本质可以理解就是这个对象的地址
2.哪个对象使用到this,就是哪个对象地址
3.$this不能在类外部使用
析构方法的作用
析构方法的作用,主要用于释放资源(比如释放数据库连接,图片资源。
销毁某个对象
快速入门
class Person{
public $name;
public $age;
//构造方法
public function __construct($iname,$iage){
$this->name=$iname;
$this->age=$iage;
}
//一个析构方法
function __destruct(){
echo $this->name."销毁资源"."<br/>";
}
}
$p1=new Person("贾宝玉",16);
$p2=new Person("林要风",14);
运行代码我们得出
1. 析构方法会自动调用
2. 析构方法主要用于销毁资源,
3. 析构方法调用的顺序,先创建的对象最后被销毁
4. 析构方法什么时候被调用
①当程序退出时
②当一个对象成为一个垃圾对象的时候,该对象的析构方法也会被调用③所谓垃圾对象,就是指没有任何变量在引用它了、
④一旦一个对象成为垃圾对象,析构函数就会立即被调用
Php编程静态变量和方法
提出一个问题?
思路:
1. 使用全局变量
什么是全局变量,在程序中任何位置都可以使用的变量称为全局变量用global修饰
global $global_nums;
$global_nums=0;
class Child{
public $name;
function __construct($name){
$this->name=$name;
}
public function join_game()
{
global $global_nums;
$global_nums+=1;
echo $this->name."加入堆雪人游戏";
}
}
$child1=new Child("李逵");
$child1->join_game();
$child2=new Child("张飞");
$child2->join_game();
$child3=new Child("唐门");
$child3->join_game();
echo "$global_nums";
2. 使用静态变量
静态变量的基本用法
①类中定义静态变量
[访问修饰符] static 变量名;
②如何访问静态变量
如果在类中访问有两种方法 selft::$静态变量名
如果在类外访问有一种方法类名::$静态变量类名::$静态变量名class Child{
public $name;
//这里定义并初始化一个静态变量$nums
public static $nums=0;
function __construct($name){
$this->name=$name;
}
public function join_game()
{
//使用静态变量
self::$nums+=1;
echo $this->name."加入堆雪人游戏";
}
}
$child1=new Child("李逵");
$child1->join_game();
$child2=new Child("张飞");
$child2->join_game();
$child3=new Child("唐门");
$child3->join_game();
echo Child::$nums;
静态方法
静态方法不能访问非静态属性
需求:当我们需要操作静态变量的时候,我们可以考虑使用静态方法在我们编程中,我们往往使用静态方法去操作静态变量
静态方法的特点:
1. 静态方法去操作静态变量
2. 静态方法不能操作非静态变量,普通的成员方法,即可以访问非静态变量也可以操作静态变量
class Student{ public static $fee=0; public $name; } function __construct($iname)
{ $this->name=$iname; } //入学 static function enterSchool($ifee) { self::$fee+=$ifee; } //获取总学费 static function getFree() { return self::$fee; } //创建学生 $stu1=new Student("小倩"); //1. 通过类名来调用静态方法 //Student::enterSchool(2000); $stu1-
>enterSchool(340); $stu2=new Student("小菜"); $stu2->enterSchool(340); echo "总学
费是".Student::getFree();。