首页 > 代码库 > PHP课程笔记8

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