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.。
php教程,php总结笔记教程
php教程,php总结笔记教程一、PHP概述十四、 PHP基础十五、面向对象思想十六、面向对象的PHP(十七、字符串和正则表达式十八、 PHP专题相关十九、 PHP常用API分类汇总二十、 MVC框架及模板二十一、 PHP网站部署及安全二十二、 PHP网站常见模块(非框架版)二十三、 PHP网站常见模块(TP框架版)二十四、用PHP+Mysql构造网站系统案例(详细设计文档)以下内容由整理)一、PHP概述PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到。
和客户端的 JavaScript 不同的是,PHP 代码是运行HTML中,尤其适合web 开发在服务端的。
使用 PHP 的一大好处是它对于初学者来说极其简单,同时也给专业的程序员提供了各种高级的特性。
PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送,接收 Cookies。
但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:, 服务端脚本。
这是 PHP 最传统,也是最主要的目标领域。
开展这项工作需要具备以下三点:PHP 解析器(CGI 或者服务器模块)、web 服务器和web 浏览器。
需要在运行 web 服务器时,安装并配置 PHP,然后,可以用 web 浏览器来访问 PHP 程序的输出,即浏览服务端的 PHP 页面。
如果只是实验 PHP 编程,所有的这些都可以运行在自己家里的电脑中。
请安装一章以获取更多信息。
查阅, 命令行脚本。
可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。
通过这种方式,仅仅只需要 PHP 解析器来执行。
这种用法对于依赖 cron(Unix 或者 Linux 环境)或者 Task Scheduler(Windows环境)的日常运行的脚本来说是理想的选择。
PHP数组部分详解(传智播客听课笔记韩顺平老师)
2014年1月1日◆数组讲解一个问题?一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg。
请问这六只鸡的总体重是多少?平均体重是多少?请你用现在掌握的技术编一程序。
现在我们使用现有技术来解决这个问题Array01.php$hen1=3;$hen1=5;$hen1=1;$hen1=3.4;$hen1=2;$hen1=50;如果我们的变量很多,如果我们分别取变量名,显然程序无法控制怎么办?我们可以使用一个新的数据类型array数组,来统一的管理这一组数◆什么是数组可以用于存放多个数据的数据类型,我们称为数组快速体验案例:用数组来解决养鸡场的问题有时为了知道某个数组共有多少个元素,可以使用系统函数count$hens[0]=3;$hens[1]=5;$hens[2]=1;$hens[3]=3.4;$hens[4]=2;$hens[5]=50;$hens[6]=30;$allWeight=0;//遍历整个数组echo "共有".count($hens)."只鸡"."<br>";for($i=0;$i<count($hens);$i++){echo "第".$i."只鸡体重=".$hens[$i]."<br>";$allWeight+=$hens[$i];}echo "<br/>"."总体重=".$allWeight."<br/>平均体重=".$allWeight/count($hens);小结:该安全重点说明数组的使用,细节稍后。
◆数组创建在php中,数组就是关键字和值的集合,我们可以这样创建①创建数组$arr[0]=123;$arr[1]=234;$arr[2]=345;几个概念:[0]→这个我们称为下标,或者称为关键字$arr[0]-→这个称为数组的一个元素$arr[0]=123; 123表示该$arr[0]元素对应的值$arr-→这个是该数组的名称在php数组中,每个元素存放的值可以是任意数据类型举例说明:$arr[0]=123;$arr[1]="hello";$arr[2]=45.6;$arr[3]=true;$arr[4]=null;//即使放入一个空值,也要占一个空间echo "数组大小".count($arr);for($i=0;$i<count($arr);$i++){echo "<br>".$arr[$i];}②创建数组的第二种方式基本语法是:$数组名=array(值,值,。
传智播客PHP学习笔记第三天6页
时间戳表示时间的方法,从某一个时刻(1970-1-1 0:0:0)开始,到当前,没过一秒,数加1;这个数据也是在计算机内采用一个整型数据来表示的。
浮点数:双精度数。
定义浮点数可以采用科学计数法//在描述的时候,通常Number = int + float特别注意:由于使用浮点数时需要表示精度,因此有些数据在保存的时候,会丢失精度。
所以不要通过判断两个浮点数是否相等来获得业务逻辑。
字符串:定义字符串单引号使用单引号包含需要定义的字符串内容即可:双引号:单引号与双引号的根本区别在于,是否可以解析字符串内部的变量。
双引号可以解析,而单引号不行。
因此双引号的解析速度要低于单引号的解析速度,能够使用单引号就尽量使用单引号。
如果使用单引号定义时,需要定义的字符串内部包含单引号碰到这个情况,应该转义内部的引号:究竟哪个变量会被解析?是否能被解析取决于是单引号还是双引号定义的:如果在解析变量时不能清晰的区分变量名,那么不能正确的识别需要解析的变量:可以在需要解析的变量周围使用大括号包含起来:大括号在双引号内,碰到$时,会去解析:转义符号的使用\ 的使用:如果在字符串的最后使用转义字符时:需要将最后的转义字符\ 进行转义:在双引号定义字符串时,转义字符还有特殊的含义,可以转义很多有其他含义的字符:还可以转义8进制或者16进制数,所对应的ascii码内的字符:a 97A 65除了单引号和双引号,还有两种定义字符串的方式:当需要定义一个比较复杂的字符串时,此时单引号和双引号就略显乏力。
复杂:1,多行2,包含一些需要特殊处理的字符Php还支持一种专门定义复杂字符的形式,定界符:Heredoc nowdoc<<<定界符的开始标记字符串的内容内容定界符的结束标记其中开始标记与结束标记应该一致HeredocNowdocHeredoc与nowdoc在形式上,只有开始的标签有区别,nowdoc的开始标签存在单引号。
PHP基本类型基本语法(传智播客听课笔记韩顺平)
2013年12月29日◆Web 站点的含义目录htdocs目录下的一个文件夹,该文件夹中包含各种web 资源(html/php/css/js/图片/视频◆Apache和php在网络中的位置◆使用uml图,描述了请求php文件的整个流程◆Php的基本语法介绍1.Php可以和html代码混合,但是一定要使用<?php//php代码?>也可以在php中嵌入html代码<?php//php代码Echo “hello world”;?><h1>hello</h1><?php?>2.还可以使用如下方法嵌入php代码(脚本)<script language=”php”>Echo “<br/>测试一下吧”;</script>☞这个不推荐3.如果只是为了显示一个变量的值<?=$i?>4.Php代码注释的方法有①注释多行代码/*代码…………………………………………………….……………………..*/②单行注释//代码………………………2013年12月29日◆Php基本语法加强1.html和php混纺2.一个语句要以”;”(分号)Parse: 解释Error: 错误Syntax: 语法3.如何定义一个变量,和变量如何使用在php中,定义一个变量要以$ 符号打头$a=890;//定义了一个变量,该变量名叫$a,然后给该变量赋了值8904.变量的数据类型不是固定的,php变量的数据类型是由运行时的上下文决定的$a=890; //$a是整型数据$a=1.1; //$a 是小数型5.Php是弱数据类型编程语言6.Php 区分大小写7.一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母数字,或者下划线☞为什么需要变量一个程序就是一个世界◆Php基本语法,基本数据类型有三大类1.基本数据类型整型interge小数(浮点数)float/double布尔类型(表示真和假)bool字符串型string2.复合数据类型数组(array)对象(object)3.特殊数据类型Null资源类型(resource)$conn=mysql_connect(“”);基本概念何为定义一个变量<?php$a=90;//相当于定义一个变量$a,并赋值90?>什么叫给变量赋值<php$a=73;$a=8; //用新的值替代78$a=”hello”; 表示$a的类型变化?>整型的细节问题1.整型可以使用十进制,十六进制0x开头或八进制0开头比如:$a=0123; //八进制$a=0x1A; //十六进制2.Php不支持无符号数,即php中整数都是有符号的在php中,一个整数,一般占用四个字节,一个字节占8位(bit)通过该图,我们可以看出,php的整数的二进制的最高位表示符号位3.通过PHP_INT_SIZE;可以显示我们自己的机器,一个整数用几个字节表示Echo PHP_INT_SIZE;通过PHP_INT_MAX 可以显示int最大的数有多少echo PHP_INT_MAX;4.如果一整数范围超过了int最大范围,则自动变为float型$a=2; 问在内存中,2是怎么样存在的000000000 00000000 00000000 00000010负数在内存中是以它的补码形式存在的◆布尔类型细节简单的说布尔类型就两个值true , false,举例://布尔类型$a=true;$b=false;以下值都会被当作false1)布尔值false自身2)整型值03)浮点型值0.04)空字符串,以及字符串”0”5)不包括任何元素的数组6)不包括任何成员变量的对象(仅php4.0适用)7)特殊类型NULL(包括尚未设定的变量)◆浮点型细节1.浮点数(也叫双精度数或实数)2.浮点数的字长和平台相关,通常最大值是1.8e308,并且具有14位十进制数字的精度(这个限制很重要)☞小数的精度如何算起,从左边开始第一个非0的数开始计算$a=0.23456789022222988; //0.23456789022223(四舍五入)$b=0.000023456789022; //2.3456789022E-5◆字符串细节1.一个字符串就是由一系列字符组织,一个字符占用一个字节$a=”hello”;//占用5个字节一个字符串类型可以表示多大的字符串?2.理论上,我们对字符串大小没有限制,即只要不超过内存就可3.字符串常见的定义方式可以用不用单引号,也可以使用双引号案例1:$i=90;$user="hello";$user1="hello$i";$user2='hello$i';echo "<br/> user1=".$user1;echo "<br/> user2=".$user2;输出结果:user1=hello90user2=hello$i从上面安全我们看出,当一个变量包含在双引号(“”)时,会输出它的值,而包含在单引号(‘’)时,是输出其字符本身案例2:转义字符的问题◆Php数据类型的自动转换变量的类型不由程序员设定的,确切的说是由php根据该变量使用的上下文在运行定的,可以通过var_dump($变量)的方式来显示类型◆Php的表达式任何有值的东西都是一个表达式◆PHP算术运算如何将小数位数保留到两位☞++和—细节问题$a=56;$b=$a++; //先赋值再运算Echo $b; //56Echo $a; //57$a=56;$b= ++$a; //先运算再赋值Echo $b; //57Echo $a; //57☞左加:+=左减:-=左乖:*=左除:/=左取模:%=$a=90;$a+=90; //$a=$a+90;echo $a;☞比较运算符$a===$b 全等,要求不仅值相等,而且类型也要相等$a!==$b 非全等◆PHP逻辑运算符$a and $b and (逻辑与)$a or $b or (逻辑或)$a xor $b xor (逻辑异或)!$a not (逻辑非)$a && $b and (逻辑与)$a || $b or (逻辑或)☞“与”和“或”有两种不同的形式原因是他的优先级不同☞逻辑或如果前面的语句为真,则它后面的语句不会执行$a=10;$b=7;if($a++>7 || $b++>7){echo "ok";}echo "a=".$a."b=".$b;//输出结果:oka=11b=7☞逻辑与如果前面的语句为假,则它后面的语句不会执行$a=10;$b=7;if($a++>10 && $b++>7){echo "ok";}echo "a=".$a."b=".$b;//输出结果:a=11b=7☞ and 和 or的运算优先级比”=”还低And 和 && 都表示逻辑与,他们的区别在什么地主主要体现在优先级上面,And < = <&&Or < = < ||配合安例:$e=false || true;$f=false or true;$e是真$f是假三元运算符表达式1 ? 表达式2 : 表达式3规则:如查表达式1的运算结果是 true ,则取表达式2的值,否则,取表达式3的值举例:$a=90;$b=80;$c=$a>$b? 12:900;echo "c==".$c;//输出:c==12◆字符串运算符即连接运算符(”.”)$a=”Hello world”;$b=”okok”;$c=$a.$b;Echo $c;//输出:Hello worldokok从上面安全我们看出,当两个变量(基本数据类型),用“.“连接的时候,就表示把它们的内容拼接起来,就把变量当作字符串来对待◆类型运算符instanceof基本语法 : instanceof用于确定是否属于某一类class的实例在实际开发中,我们可能需要去判断某个变量是是否是某个类型。
传智播客PHP面试题及答案宝典(下卷高级篇)(精)
传播智慧,引领未来PHP面试题宝典第一版(下卷高级篇)传智播客PHP教研组韩顺平,王超平收集整理,试题来源网络和学生求职面试题传播智慧,引领未来PHP核心技术1.写出一个能创建多级目录的PHP函数(新浪网技术部)2.写出smarty模板的特点(新浪网技术部)速度快,编译型,缓存技术,插件机制,强大的表现逻辑3.打开php.ini中的safe_mode,会影响哪些函数?至少说出6个。
(新浪)1)用户输入输出函数(fopen()file()require(),只能用于调用这些函数有相同脚本的拥有者)2)3)4)5)6)创建新文件(限制用户只在该用户拥有目录下创建文件)用户调用popen()systen()exec()等脚本,只有脚本处在safe_mode_exec_dir配置指令指定的目录中才可能加强HTTP认证,认证脚本拥有者的UID的划入认证领域范围内,此外启用安全模式下,不会设置PHP_AUTHmysql服务器所用的用户名必须与调用mysql_connect()的文件的拥有者用户名相同受影响的函数变量以及配置命令达到40个4.抓取远程图片到本地,你会用什么函数?(笔试题)file_get_contents或者curl5.PHP的垃圾收集机制是怎样的(腾讯)PHP可以自动进行内存管理,清除不再需要的对象。
PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。
每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。
当reference离开生存空间或被设为NULL,计数器减1。
当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占传播智慧,引领未来的内存空间。
6.请写一段PHP代码,确保多个进程同时写入同一个文件成功(腾讯)核心思路:加锁7.写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名,例如:/abc/de/fg.php?id=1需要取出php或.php(新浪)方案1:答案2:相关题目:使用五种以上方式获取一个文件的扩展名,要求:dir/upload.image.jpg,找出.jpg或者jpg,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如get_ext1($file_name),get_ext2($file_name)传播智慧,引领未来8.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
php面向对象重点知识分享
php⾯向对象重点知识分享1、$this是什么当前类实例化的对象2、访问对象中的成员对象->成员3、构造⽅法通常⽤来初始化对象的属性,不⽤把属性写死,不同的对象就有了不同的属性4、get、set的⽤法通常将属性设为protected,利⽤getXxx和setXxx⽅法来设置和获取属性的值,避免外部随意的更改,同时还可以对对象进⾏过滤。
5、类的封装public⽅法可以在类外访问,相当于提供给外部的接⼝private⽅法只能在类内(即类的⼤括号内),外部不能直接访问,只能通过其他public⽅法来调⽤,就像电脑的开关,按电源键就可以开机。
protected,同private,不过可以在其他的类中继承。
6、类的继承与重写 (extends)继承的类可以访问⽗类的public和protected⽅法或属性,避免了代码的重写。
继承的类重写⽗类的⽅法只需取与⽗类同样的⽅法名,在⾥⾯写⾃⼰的代码即可。
7、抽象类(abstract)抽象类是⽤来继承的,不能直接实例化,抽象⽅法不⽤写⽅法体作⽤是硬性的规定⼦类需要实现的⽅法,不实现不能实例化8、接⼝(interface)继承使⽤implements保证代码的⼀致性9、命名空间与⾃动加载(namespace)避免重名冲突,避免每次使⽤类前require的操作申明类前有namespace ⽂件位置namespace app/Admin;使⽤类前有use namespace/类名use app/Admin/User;10、静态变量和静态⽅法可以看作是全局性的⽅法不⽤实例化对象即可使⽤使⽤⽅法:类名::成员11、const变量const主要是⽤于⼀些硬性的规定数据和约定俗成的数据码上⾯,可在类外使⽤,只能在定义处修改,⽐如我们的http状态码定义:const ABC=12;使⽤:类名::ABC;以上就是php⾯向对象哪些重点的详细内容,感谢⼤家的学习和对的⽀持。
PHP对象相关知识总结(6)
PHP对象相关知识总结(6)PHP对象相关知识总结{private $proPrivate = "private of C";protected $proProtected = "protected of C";public $proPublic = "public of C";private function foo(){/* original method is replaced; the scope of the new one is C */echo "I am C\";}public function myFoo(){//parent::foo();$this->foo();}}echo "Class B:\";$b = new B();$b->test();echo "\Class C:\";$c = new C();$c->myFoo();$c->test(); //fails上例输出结果:1234567891011121314Class B:private of Aprotected of Apublic of Aprivate of Aprotected of Apublic of AClass C:I am Cprivate of Aprotected of Cpublic of CFatal error: Uncaught Error: Call to private method C::foo() from context 'A' in /public/t.php:19 Stack trace: #0 /public/t.php(54): A->test() #1 {main} thrown in /public/t.php on line 19继承:官方文档对继承有这样一段描述“当扩展一个类,子类就会继承父类所有公有的和受保护的方法。
- 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();。