面向对象2

1、静态成员

在类中除了有普通的成员(普通的属性和普通的方法),还有静态的成员(静态属性和静态方法)
⭐对比如下:

  1. 静态
<?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();
$b3->showme();

输出结果为:
在这里插入图片描述

  1. 普通
<?php
 
class Book
{
    private $sum = 0;
 
    public function showme()
    {
        $this->sum++;
        printf('你是第%d位访客<br/>', $this->sum);
    }
 
}
 
//第一次实例化对象
$b1 = new Book();
$b1->showme();
 
//第二次实例化对象
$b2 = new Book();
$b2->showme();
 
//第三次实例化对象
$b3 = new Book();
$b3->showme();

在这里插入图片描述
通过比对运行结果,我们会发现两者有明显的区别。我们来总结静态变量的特点。
静态变量 类型说明符是static。
静态变量属于静态存储方式,其存储空间为内存中的静态数据区,该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),直到整个程序运行结束

在类的外部访问静态成员时,必须使用类名和扣操作符 :: ,而不需要创建对象

2、单例设计模式(三私一公)

  • 一个类永远只能创建一个对象,不管用任何方法都无法创建第2个对象。
  • 一私:私有的静态的保存对象的属性。
  • 一私:私有的构造方法,阻止类外 new 对象。
  • 一私:私有的克隆方法,组织类外 clone 对象。
  • 一公:公共的静态的创建对象的方法。

3、对象之间赋值与clone

对象之间的赋值和普通变量的赋值是有区别的

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

输出:
在这里插入图片描述
两个普通的变量之间赋值

<?php
$name1 = "张三";
 
//变量之间赋值
$name2 = $name1;
 
$name2 = "李四";
 
echo $name1;
echo '<br>';
echo $name2;

输出:
在这里插入图片描述
对象之间的赋值,实际就是引用赋值,两个对象之间赋值后,就是一个对象了。所以当一个对象的内容发生变化后,另一个对象的内容也会发生变化。
提示:
普通变量之间的赋值,如果也想使用引用赋值,必须使用&,如:
$ name2 = & $ name1
那么,$ name1和$ name2也变成了同一个变量,它们之间相互影响。

复制一个对象,不要让复制后的对象爱原来对象的影响,使用clone 可以实现。“属于浅克隆”。

命名空间

命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。

默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。

<?php
namespace model; //定义命名间
 
//类Student在model命名空间中
class Student
{
    public function say(){
        echo 'hello';
    }
}

要想使用命名空间中的类,必须要引入这个类,如:use model\Student

引入命名空间的类时,也可以给类重新命名,原有的类名不能再使用。如:use model\Student as Stu
在有些场景下必须给类重新命名,如果你的同时引用两个类并且两个类名一样时必须重新命名。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值