PHP课程笔记8

课时154 PHP类的访问类型控制

1.子类用extends 来继承,

2.private 只能自己使用,自己的子类都不行

3.protected 保护权限,可以是自己和自己的子类使用,其他的不行.



课时155 PHP继承中的重载(覆盖)

对象 -> 成员

类 :: 成员

parent::成员  使用此来调用父类中被覆盖的方法

重要:  只要是子类的构造方法,去覆盖父类的构造方法,一定要在子类的最上面调用一次父类的构造方法.

权限问题: 子类只能大于或等于父类的权限.



课时156 PHP常见的关键字

final 可以修饰类  ---这个类不能有子类,不让扩展

final 可以修饰方法 ---这个方法就能在子类中覆盖

final 不可以修饰成员属性



课时157 static关键字的使用1

static 可以可以修饰属性和方法,但不能修饰类

它修饰的成员方法,可以存在内存的初始化静态段.

可以被所有同一个类的对象共用.

1.第一次用到这个类时,类加载到内存中,就已经将静态成员加到了内存里



 课时158 static关键字的使用2

1.static修饰的成员也可以修改值

2.self可以在类中的方法中,代表自己类的($this)

self::$bianliang

3.静态成员一旦被加载,只有在脚本结束后才释放

4.静态方法可以在不经过创建对象就直接使用

5.在静态的方法中,是不能访问非静态的成员的,

6.只要是能使用静态的环境下声明方法,最好使用静态方法,主要是考虑到效率



 课时159 单态(单例、单件)设计模式

<?php
/*

*   一个类只能有一个对象存在
* 单态(单例)设计模式 -- 最适合PHP使用这个设计模式
*
* 1.如果想让一个类,只能有一个对象,就要先让这个类不能创建对象.将构造方法私有化(private)
* 2.可以在类的内存中使用一个静态方法,来创建对象方法
*/
class Person {

static $obj = null;

private function __construct(){

}

static function getobj(){
//如果第一次调用时没有对象,则创建,以后调用时,直接使用第一次创建的对象.
if(is_null(self::$obj)){
self::$obj = new self;
}
return self::$obj;
}

function say(){

echo "hahahahahahah<br>";
}

function __destruct(){

echo "#######<br>";
}
}

$p = Person::getobj();
$p -> say();
$p = person::getobj();
$p = person::getobj();

?>

结果:

hahahahahahah
#######



课时160 const关键字

<?php
/*
*
* define("常量名","值")
* 不能在类里用define定义常量
*
* const修饰的成员属性为常量,也只能修饰成员属性
* final 修饰类和方法
* static 修饰属性和方法
*
* 1.常量建议使用大写,不能使用$
* 2.常量一定要在申明时就给好初值
* 3.常量的访问方式和静态的访问方式一样,但只能读
* a.在类外部使用 类::常量名
* b.在类的内部使用 self::常量名
* 4.
*
*/

define("ROOT","/user/local/lib/");

class Demo{
public $name;
//define(); 不能使用
const SEX="男";

static function say(){
echo "<br>我的性别是".self::SEX."性<br>";
}
}

echo Demo::SEX;
Demo::say();

?>

结果:


我的性别是男性



课时161 魔术方法__toString()

<?php
/*
* __construct()
* __destruct()
* __set()
* __get()
* __isset()
* __unset()
*
* 特点
* 1.自动调用,但不同的魔术方法有自己的调用时机
* 2.都是以"__"(双下划线)开头的方法
* 3.所有的魔术方法名都是固定的
* 4.如果不写,就不存在,也就没有默认的功能
*
* __toString()
* 1.是在直接使用 echo print printf输出一个对象引用时,自动调用这个方法
* 2.将对象的基本信息放在__toString()方法内部,形成字符串返回
* 3.__toString()方法中不能有参数,而且必须返回一个字符串
*/
class Person{
public $name;
public $age;
public $sex;

function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}

function say(){

}

function __toString(){
$a = "这样可以?";
$b = "设置变量再返回";
return $b.$a;
}
}

$p = new Person("六六",12,"女");
echo $p;
?>

结果:

设置变量再返回这样可以?



课时162 魔术方法__clone()

<?php
/*
* 1.使用clone这个关键字克隆对象,内存中会存在两个对象
*
* __clone()魔术方法
* 1.在克隆对象时,自动调用该方法
* 2.作用:和构造方法一样,是对新克隆的对象进行初始化
* 3.在这个方法中$this代表的是副本,所以就可以给所有的副本成员初始化
*/

class Person{
public $name;
public $age;
public $sex;

function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}

function say(){
echo "我的名字是{$this->name}<br>";
}

function __toString(){
return "aaa";
}

function __destruct(){
echo "123<br>";
}

function __clone(){
echo "我是克隆的:";
$this->name = "zaj";
}
}

$p = new Person("sce",13,"man");

$p -> say();

$p2 = clone $p;

$p2 -> say();
?>

结果:

我的名字是sce
我是克隆的:我的名字是zaj
123
123



课时163 魔术方法__call()

<?php
/*
* 通过__call()处理错误调用
*
* __call()
* 1.就是在调用一个对象中不存在的方法时,自动调用的方法
* 2.有两个参数: 第一个参数,调用的不存在的方法的方法名,第二个参数,是调用这个不存在的方法的方法参数
* 3.可以把功能比较相似的方法合成一个去写
* 4.作用: 可以写提示,但这个不是主要功能. 第二个功能,就是3里标明的可以把方法名不同但功能相似的合成一个来写
*
*/

class Person{

public $arr = array("a","b","c");

function __call($method,$args){
//echo "出错了,{$method}不存在<br>";
if(in_array($method,$this->arr)){
echo $args[0],"<br>";
}else{
echo "调用方法{$method}不存在<br>";
}
}

}

$p = new Person();

$p -> eat("肉");

$p -> a("a");
$p -> b("b");
?>

结果:

调用方法eat不存在
a
b



课时164 对象串行化(序列化)1

<?php
/*
* 对象串行化(序列化) --- 将对象转成字符串(不用看懂字符串)
* 返串行化 --- 将字符串转为对象
* 注意: 转化的时机:
* 1.将对象在网上传输时要将对象串行化
* 2.将对象长时间保存,保存到数据库保存到文件要将对象串行化
*
*
*/

include "clone.php";

$s = new Person("zaj",123,"man");
$s -> say();

//将对象串行化
$str = serialize($s);

//将对象保存在文件中
file_put_contents("objstr.txt",$str);

echo "对象转完字符串,保存到文件中成功<br>";

//返串行化
//对出字符串中文件中
$str2 = file_get_contents("objstr.txt");
$ss = unserialize($str2);
$ss -> say();
?>

结果:

我的名字是zaj
对象转完字符串,保存到文件中成功
我的名字是zaj
123
123



PHP课程笔记8

时间: 2024-07-31 16:11:26

PHP课程笔记8的相关文章

《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) 没做过,没把握 合格