PHP课程笔记9

课时165 对象串行化(序列化)2

* __sleep()在串行化时自动调用的方法
* 作用:可以设置需要串行化的对象的属性
* 只要在这个方法中,返回一个数组,在数组中声明了那个属性名,那个属性就会被串行化,没有在数组中的属性就不被串行化.
* 默认不加数组,全部属性都串行化.
*
* __wakeup()---在返串行化时自动调用的方法
* 作用:
* __construct()对对象进行初始化
* __clone()对克隆对象进行初始化
* __wakeup()对串行化回来后的对象进行初始化

function __sleep(){
echo "开始串行:";
return array("name");}

function __wakeup(){
echo "返串行化开始:";
$this->name = "sce";
}



课时166 PHP数组的串行化(JSON格式)

<?php
/*
* 数组串行化 json ---- javascript object
* 处理json_encode() 不支持中文的情况
* 实际应用中,当有中文字符时,当直接使用json_encode() 函数会使汉字不能正常显示
*
*/$arr = array("name"=>"zhangsan","age"=>10,"sex"=>"man");

//串行化
$str = json_encode($arr);

//返串行化,第二个参数true返串行化为数组
$prr = json_decode($str,true);

echo $prr[‘name‘];
?>
结果:

zhangsan



课时167 魔术方法__set_state()

<?php
/*
* 1.eval()函数 --- 检查并执行php代码
* 2.var_export()可以打印各个类型的信息,但会将类似转成合法的php代码
*
* __set_state()方法,就在在使用var_export()方法时,到处一个类的信息时自动调用的方法
*
*/
class Person{
public $name;
public $age;
public $sex;function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}

function say(){

}
static function __set_state($arr){ //方法必须是静态的.
$p = new person("lisi",43,"woman");
$p->name = $arr[‘name‘];
$p->age = $arr[‘age‘];

return $p;
}

}

$b = new person("zhangsan",20,"man");
$b ->name = "liiii";
$b ->age = 234;

eval(‘$c =‘.var_export($b,true).";");

var_dump($c);
?>

结果:

object(Person)[2]
  public ‘name‘ => 

string

 ‘liiii‘ (length=5)
  public ‘age‘ => 

int

 234
  public ‘sex‘ => 

string

 ‘woman‘ (length=5)

课时168 PHP 5.3以后新增的魔术方法

__invoke()

在对象实例之后,直接像变量函数一样直接调用这个对象,引用后加上()自动调用这个方法.

__callstatic()

跟__call()一样,但是它是用来处理静态方法的.而且自身也必须是静态的.



课时169 自动加载类__autoload()

__autoload()

只要在这个脚本中,需要加载类的时候,就会自动调用这个方法.

<?php
//   一个文件放一个类, 文件名就是类名. 再加二级域名class.
function __autoload($classname){
include strtolower($classname)."class.php";
}

?>



课时170 PHP抽象方法和抽象类1

 * 1.什么是抽象方法?
 * 定义:一个方法如果没有方法体(一个方法,不使用"{}",直接使用分号结束的方法,才是没有方法体的方法),则这个方法就是抽象方法
 *
 * 一.声明一个方法,不实用{},而直接以分号结束
 * 二.如果是抽象方法,必须使用abstract(抽象关键字来修饰)
 * 2.什么是抽象类?
 * 一.如果一个类中有一个方法是抽象的方法,则这个类就是抽象类
 * 二.如果声明一个抽象类,则这个类必须要使用abstract来修饰
 *
 * 注意:
 * 1.只要使用 abstract 修饰的类,就是抽象类
 * 2.抽象类是一种特殊的类,特殊在抽象类中可以有抽象方法
 * 3.除了在抽象类中可以有抽象方法以外,和正常的类完全一样

 abstract class person { //抽象类
 //抽象方法
 abstract function say();
 }

课时171 PHP抽象方法和抽象类2

* 注意2:
* 1.抽象类不能实例化对象(不能创建出对象)
* 2.如果看见抽象类,就必须写这个类的子类,将抽象类中的抽象方法覆盖(加上方法体).
* 3.子类必须全部实现(覆盖重写)抽象方法,这个子类才能创建对象,如果只实现部分,那么还有抽象方法,那么子类也必须是抽象类
*
* 抽象方法作用: 抽象方法就是一个规定了子类必须有这个方法.子类必须有这个方法的实现,功能交给子类
* 只写出结构,而没有实现,实现交给具体的子类去实现
*
*
* 抽象类的作用:就是要求子类的结构,所以抽象类就是一个规范

abstract class person { //抽象类
//抽象方法
abstract function say();
}

class student extends person {
function say(){
echo "子类实现功能";
}
}

$s = new student();
$s -> say();

结果:

子类实现功能


课时172 PHP面向对象接口技术

<?php
/*
* 抽象类是一种特殊的类,接口是一种特殊的抽象类,所以接口也是一种特殊的类
* 1.抽象类和接口都有抽象方法
* 2.抽象类和接口都不能创建实例对象
* 3.抽象类和接口的使用意义也是作为一种规范
*
* 接口和抽象类相比,特殊在:
* 1.接口中的方法,必须全要是抽象方法
* 所以在接口中的抽象方法不需要使用abstract,直接使用分号结束即可
* 2.接口中的成员属性,必须是常量(不能有变量)
* 3.所有的权限必须是公有的(public)
* 4.声明接口不使用class,而是使用interface
*
*
*
*
*/

class Demo {

}

abstract class Demo2 {

}

interface Demo3 {
const NAME = "sss";
function test();
}

echo Demo3::NAME;

?>

结果:

sss



课时173 PHP接口应用的一些细节

* 接口应用的一些细节:
* 1.可以使用extends让一个接口继承另一个接口 (接口和接口的关系---只有扩展新的抽象方法,没有覆盖关系)
* 2.可以使用一个类来实现接口中的全部方法,也可以使用一个抽象类,实现接口中的部分方法 (类与接口,抽象类与接口---存在覆盖关系)
* 3.类与接口,抽象类与接口就不用使用extends这个关键字,使用implements(实现). implements相当于extends
* extends 继承(扩展),在这个PHP中,一个类只能有一个父类
* 4.一个类可以在继承另一个类的同时,可以使用implements实现一个接口或者多个接口 (一定要先继承再实现,顺序不能变)
* 5.实现多个接口,只需要使用逗号分开多个接口即可

interface Demo3 {
const NAME = "sss";
function test();
}

interface Test extends Demo3 {
function test2();
}

class hello implements Demo3 {
function test(){

}
}

echo Demo3::NAME;



课时174 PHP面象对象的特性多态



课时175 PHP多态的应用实例

<?php
/*
* 多态特性:
* 1.程序扩展准备
* 技术:
* 1.必须有继承关系,父类最好是接口或抽象类
*/

interface USB {     //创建接口USB
const WIDTH = 12;
const HEIGHT = 3;

function load();

function run();

function stop();
}

class computer {
function useUSB(USB $usb) { //参数里边类和接口是可以用类名来限制的. 这个方法里只能传这个接口或类的对象.
$usb -> load();
$usb -> run();
$usb -> stop();
}
}

class Mouse implements USB{
function load(){
echo "加载鼠标成功<br>";
}

function run(){
echo "运行鼠标<br>";
}

function stop(){
echo "鼠标拔出<br>";
}
}

class keyPress implements USB {
function load(){
echo "加载键盘<br>";
}

function run(){
echo "运行键盘<br>";

}

function stop(){
echo "停止键盘<br>";
}
}

class worker {
function useing(){
$c = new computer();
$m = new Mouse();
$k = new KeyPress();
$c -> useUSB($k);
$c -> useUSB($m);
}

}

$wk = new worker();

$wk ->useing();
?>

结果:

加载键盘
运行键盘
停止键盘
加载鼠标成功
运行鼠标
鼠标拔出

时间: 2024-10-11 21:12:43

PHP课程笔记9的相关文章

《nodejs+gulp+webpack基础实战篇》课程笔记(四)-- 实战演练

一.用gulp 构建前端页面(1)---静态构建 npm install gulp-template --save-dev 通过这个插件,我们可以像写后台模板(譬如PHP)一样写前端页面.我们首先学习一下写法. 现在我们创建一个新任务:创建一个裸的index.html文件,然后在body里面写上 ,我的年龄是:<%= age %> 下载好gulp-template,我们引用并配置 var gulp_tpl = require("gulp-template"); gp.tas

Linux操作系统及应用课程笔记 索引

第0部分  软件的安装与配置 Linux下软件的安装与配置 第1部分*   绪论 第2部分*  Linux的安装过程 第3部分   系统Shell和常用命令 Shell文件相关常用命令及参数总结 Linux下常用命令 第4部分  VI编辑器 Linux下vi编辑器的使用 <<学习vi和vim编辑器>>1 <<学习vi和vim编辑器>>2 第5部分  Shell脚本 Shell入门之脚本管理 Shell入门之测试操作 Shell入门之条件循环 Shell入门之

Andrew Ng机器学习课程笔记(五)之应用机器学习的建议

Andrew Ng机器学习课程笔记(五)之 应用机器学习的建议 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7368472.html 前言 学习了Andrew Ng课程,开始写了一些笔记,现在写完第5章了,先把这5章的内容放在博客中,后面的内容会陆续更新! 这篇博客主要记录了Andrew Ng课程第五章应用机器学习的建议,主要介绍了在测试新数据出现较大误差该怎么处理,这期间讲到了数据集的分类,偏差,方差,学习曲线等概念,帮

JAVA课程笔记_1

一 课程内容 set path查看路径信息:当编译一个程序或命令时,先从当前目录查找,如果没有,按path中的路径按顺序查找,先找到后就不查找后面的路径了. 可以将目录加入环境变量,set path="复制的路径" 可以在.java程序中编写多个类,当编译时,每个类生成各自的字节码文件. 由于多个类的字节码文件不利于管理,使用bin目录下的jar命令可以将多个字节码文件打包成jar包发布给其他程序员使用. 使用方法:先在命令提示符下输入jar,会出现使用方法和实例.Jar打包两个cla

Django开发BBS---51网络课程笔记(目录)

这是51cto中bbs课程中的一个项目,这里写一下每节的目录: Django开发BBS---51网络课程笔记(1) 这部分主要介绍了数据库的搭建及站点管理 http://4440271.blog.51cto.com/4430271/1663863 Bootstrap开发 这不分主要讲前端的设计 http://4440271.blog.51cto.com/4430271/1663934 Django开发BBS---51网络课程笔记(2) 这部分主要讲view与前端的衔接部分 http://4440

跟我学《JavaScript高程3》第三讲,课程笔记

跟我学<JavaScript高程3> 第三讲:第4章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步深入,找到一份前端工作    课程大纲:本书目录结构 适合人群:前端初学者,可以0基础,但要认真,踏实 课程回顾 1.数据类型:5种基本类型,1中复杂类型. 2.操作符:需要注意运算优先级,算关逻条赋逗. 3.语句:if-else.for.for-in.while 4.函数:函数定义,目前的两种方法 补充:变量在

【课程笔记】需求挖掘与分析

*…* 产品定位与分析有三部分内容:需求分析.用户调研.市场分析. 下面是前两部分内容的课程笔记,整理成思维导图.

(转)妙味课堂—JavaScrip中级课程笔记

DOM基础概念.操作 DOM的概念及节点类型 childNodes children nodeType attributes 子节点和兄弟节点的操作 firstChild firstElementChild lastChild.lastElementChild nextSibling.previousSibling 父节点 parentNode offsetParent 元素位置宽高 offsetLeft.offsetTop offsetWidth.offsetHeight getPos() 操

Android网络项目课程笔记-----Volley框架

Volley 问题原因: Android4.x版本和2.x对AsyncTask的机制不同 2.x之中,同时执行5个,4.x同时只有一个 解决思路: 1) 使用Thread + Handler 注意: 使用线程池 2) 定制AsyncTask线程池 3) 开源框架Volley 1. 检查网络 2. 退出 3. 总结 有待改进 做的比较好的 商业级项目: 1) 稳定性   不要轻易FC    运行时异常 2) 用户体验:流畅(性能)/美观 3) 可扩展性 4) 可读性 5) 异常流程:提示 + 指导

Android网络项目课程笔记-----计划

目标:好用 充分:1) 角色完整 产品经理   灵魂 美工  交互设计师 开发   架构师 开发者 测试 小部分用户 2) 运营推广 基础:能用 必须: 1) API   框架 2) 模块(一个功能集合) * 3) 业务流程 4) bug 具备解决大部分中等难度bug的能力 5) 自学新技术的能力 6) 阅读代码 不合格:1) 做不了,有难度.需要很长时间 2) 只是做了,对过程负责.对结果不负责 3) 只是掌握了某个功能的基本实现方法,一旦出了bug, 解决效率很低 4) 没做过,没把握 合格