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


 

转载于:https://www.cnblogs.com/Xavier13/p/4207896.html

if条件判断 if(条件表达式1,结果true和false) { 执行代码1; }else if(条件2) { 执行代码2; }else if(条件3) { 执行代码3; }else { 默认执行的执行代码; } switch多分支结构 switch(变量名称) { case 值1: 执行代码1; break; //中断程序运行,并跳到switch结束大括号}之后 case 值2: 执行代码2; break; default: 默认执行的代码; } if和switch的主要区别:if的条件应该是一个范围,switch的条件应该是一个值。 while循环语句 在什么情况下使用循环语句?重复输出一些内容时使用。 var i=1;//变量初始化; while(i<10) { document.write(i+” ”);//重复执行的代码; i++; //变量更新,避免一个死循环 } do while循环语句 do while循环是while循的一个变体。 do while循环,先执行循环体代码,再进行条件判断。至少执行一次循环体的代码。 While循环,先进行条件判断,再执行循环体的代码。如果条件不满足,直接跳转到while结束}之后 语法结构: do{ 循环的代码; }while(条件判断); //实例:输出不同等级的标题 var i = 1; var str = ""; //最后的结果 do{ str += "广州传智播客PHP培训学院"; //str = str + …… i++;//变量更新 }while( i<=6 ); document.write(str); for循环语句 语法结构: for(变量初始化;条件判断;变量更新) { 循环体代码; } 举例1:输出1-100间所有的偶数 for(var i=1;i<100;i++) { if( i%2==0) { document.write(i+” ”); } } 数组 一、数组的基本概念 数组就是一组数据有序排列的一个集合。例如:var arr = [10,20,30,40,50] 数组元素:数组中的每一个值,就叫一个数组元素。比如:20就是一个数组元素 数组索引:数组中的第一个元素,都有一个编号(索引、下标),索引号是从0开始的正整数,依次为0、1、2…… 数组元素的访问:数组名称连上[],[]中是元素的索引号,例如:arr[4]=50,arr[0]=10 数组的长度:指数组中元素的个数 问题:数组的长度,与数组中最大索引号有什么关系?也就是:数组个数-1=数组的最大索引号 二、创建一个数组 (1)使用new运算符结合Array()构造函数来创建 方式一:创建一个未知长度的数组 var arr = new Array(); //增加数组元素,数组的值可以是任何的数据类型 //字符串、数值、布尔、undefined、null、array、object、 function arr[0] = 10; arr[1] = 20; arr[2] = true; arr[3] = "abc"; arr[4] = undefined; //相当于 arr[4]; //打印输出所有的值,通过document.write输出数组时,将自动转换成一个字符串输出 document.write(arr); 方式二:创建指定长度的数组,()中只有一个整数 var arr = new Array(3); //创建一个包含3个元素的数组 arr[0] = 10; arr[1] = 20; arr[2] = 30; 方式三:将多个数组元素添加小括号()中,各个元素间用逗号隔开 var arr = new Array(10,20,30,40,50); arr[0] = arr[0] + 90; //将第0个元素加上90 document.write(arr[0]); //结果为100 (2)使用中括号[]来创建一个数组 var arr = [10,20,30,40]; var arr = [“周列生”,true,30,“大专”,“毕业院校”];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值