php第三课总结

静态成员

静态的成员(静态属性和静态方法)

静态变量关键字:static 可写在权限修饰符前也 可以写在权限修饰符后

<?php
 
 
class Book
{
    //使用static关键字声明成员是静态的
    private static $sum = 0;
 
    public function showme()
    {
        //访问静态成员,必须使用self关键字和 :: 操作符
        self::$sum++;
        printf('你是第%d位访客<br/>', self::$sum);
    }
 
}
//第一次实例化对象
$b1 = new Book();
$b1->showme();
 
//第二次实例化对象
$b2 = new Book();
$b2->showme();
 
//第三次实例化对象
$b3 = new Book();
$b2->showme();

注意1:静态属性的作用是:保留原始数据值 并往下叠加

如果不使用static 属性  则每一次答案都是 你是第一位访客。

注意2:在类中访问静态属性时可以用self::$属性名 (注意加上$符号 表示的是成员属性名 如果不加 表示常量)  形式(self)代表当前类, 也可以写  类名::属性名 (但建议一般写第一种方式  因为 self代表的就是本类所以再修改类名的时候 self代替了该类名),另外 在类外访问静态方法时就只能用  类名::静态属性方法名    在类外不可以调用self (代表当前类)$this(代表当前方法)也同理。

注意3:静态方法必须使用静态成员。


静态成员和类常量的区别:类常量一次http中请求过程中 值永远不变
 静态变量不是  静态变量没有权限

单例模式的特点:

一个类只能创建一个对象
虽然单例模式运行出来有时候是两个值 但是 它代表的是一个对象单号 我们可以有两种测试方法1: 可以使用var_dump( d b 1 , db1, db1,db2)的方法看结果是不是一个对象单号(#1)
方法2:可以使用=== if条件判断方法 测试

单位模式的代码需要实现哪些功能

简称:三私一公、
1,私有的静态的保存对象的属性
2,私有构造方法
3,私有的克隆方法
4公共的静态对象方法

<?php
 
//单例
class Uni
{
    //创建静态私有的变量保存该类对象
    static private $instance;
 
    //构造方法是私有,防止外部直接创建对象
    private function __construct()
    {
    }
 
    //防止克隆对象
    private function __clone()
    {
 
    }
 
    static public function getInstance()
    {
        //判断$instance是否是Uni的对象
        //没有则创建
        //注意instanceof的使用
        if (!self::$instance instanceof self) {
            self::$instance = new self();  //在类中实例化本类的对象,使用self
        }
        return self::$instance;
 
    }
 
    //普通方法
    public function method()
    {
        echo '正常执行对象中的方法';
    }
}
 
$ob1 = Uni::getInstance(); //获取uni的对象
$ob1->method();
echo "<br>";
 
$ob2 = Uni::getInstance();
$ob2->method();
echo "<br>";
 测试单例方法一:
if ($ob1 === $ob2) {
    echo 'obj和ob2是同一个对象';
} else {
    echo 'obj和ob2不是同一个对象'; 
}
测试单例方法二:
var_dump($boj1,$obj2);



克隆:
关键字:clone;
注意:克隆出来的对象 还是两个。


<?php
class Student
{
    public $name;
}
 
$s1 = new Student();
$s1->name = '张三';
 
//克隆对象
$s2 = clone $s1;
$s2->name = '李四';
 
echo $s1->name;
echo '<br>';
echo $s2->name;

对象赋值:
对象之间的赋值,实际就是引用赋值,两个对象之间赋值后,就是一个对象了。所以当一个对象的内容发生变化后,另一个对象的内容也会发生变化。

普通变量之间的赋值,如果也想使用引用赋值,必须使用&,$name2 =& $name1;

那么, n a m e 1 和 name1和 name1name2也变成了同一个变量,它们之间相互影响。

命名空间:关键字namespace

创建一个文件:student.php

<?php
namespace model; //定义命名间
 
//类Student在model命名空间中
class Student
{
    public function say(){
        echo 'hello';
    }
}
创建一个测试文件:test.php

<?php
use model\Student; //引入 model命名空间的Student 类
 
require_once 'student.php';
 
$stu = new Student();

$stu->say();

类的自动加载

何时自动加载?

当试图使用未定义类时。
使用new创建不存在的类时。
继承一个不存在的类时。
使用静态方法调用一个不存在的类时,
当实现不存在的接口时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值