开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1095|回复: 0
收起左侧

[PHP相关教程] PHP- 类与对象

[复制链接]
发表于 2020-7-16 12:00:19 | 显示全部楼层 |阅读模式   山东省德州市

类与对象

1 概念

序号 名称 描述 关键字
1 class 对象的模板 class
2 对象instance 类的实例 new
  • 类与对象界限并不清晰,在不影响理解前提下,常用类代表实例来引用类成员
  • 对象与类的某一个实例绑定, 所以对象与实例可视为同义词,互换并不影响
# 对象也是实现代码复用的手段
# 要使用对象,就必须创建一个类,根据这个类,不断创建多个对象出来,实现代码复用

#类的声明与实例化
// 声明类
class Goods{

}

#类的实例化,是一个创建对象的过程。new

$goods = new Goods();
# 再不会引起误会的情况下,示例与对象是同义词

// 判断对象$goods是不是类Goods的示例
var_dump($goods instanceof Goods);
// 输出 bool(true)

// 查看 对象$goos 的类名
echo get_class($goods);
// 输出 Goods

// 类名是支持使用变量的,动态类
$class = 'Goods';
$obj = new $class();
echo get_class($obj);
// 输出 Goods

// 用函数将首字母转为大写 动态生成类名经常用
$class = *First('goods');
echo $class;
// 输出 Goods

2 类中成员

2.1 按功能分类

序号 名称 描述 关键字
1 类属性property 类中变量
2 类方法method 类中函数 function
3 类常量method 类中常量 const .
<?php
# 类成员:类属性,类方法,类常量
//  类名必须首字母大写
class User
{
    // 类中变量必须要有作用域:或者叫访问限制
    // 语法 : 访问限制符 $ 变量名 = 值
    // 常规属性  跟静态属性相比又叫动态属性
    // public 公开的
    // 字符串
    public $name = 'micheal';
    // 数字
    public $age = 15;
    // 数组
    public $arr = [1,2,3,4];
    // nowdoc heredoc
    public $txt = <<< TXT
    <h2>我爱你中国</h2>
    TXT;

    ####但是####
    // 以下属性不可以用 :非法属性值
    // 不能用变量
    // public $age = $varl;、
    // 不能用类属性 类方法 赋值
    // public $age = $this->age;
    // 不能用表达式
    // public $age = $age*10;
    // 不能使用函数调用的结果
    // public $age = age();

    // 2.静态属性
    // 如果一个属性的值对所有示例来说是一样的,换句话说就是他被所有的对象所共享 那么就没有必要用对象来访问
    // 用类访问,此时可以声明为静态的

    public static $username = '双倍快乐';
    // php 程序运行简单分为两个阶段:编译,执行
    // 静态属性在程序的编译阶段就完成了初始化,已经有了值了
    // 静态属性创建时一定要有值或者默认值,不依赖类的实例化对他进行初始化

    // 3.抽象属性:没有被初始化,默认值可以认为null,但不能给他赋值null否则会发生根本性变化,赋值后就不是抽象属性了
    public $ages;
}

// 访问
$user = new User;
//  -> 对象和成员访问符
echo "姓名:{$user->name}";
// 输出  姓名:micheal
// 在类的外部可以给类中的值进行更新
$name = 'kaiwen';
$user->name = $name;
echo "姓名:{$user->name}";
// 输出  姓名:kaiwen

echo $user->txt;
// 输出  我爱你中国

// 访问静态属性 适用范围解析符,双冒号::
echo User::$username;
// 输出 双倍快乐
// 静态属性也支持更新
User::$username = '不会快乐';
echo User::$username;
// 输出 不会快乐

2.2 按访问权限分类

序号 名称 关键字 类外部 类内部 类继承上下文 描述
1 公开成员 public 允许 允许 允许 默认
2 受保护成员 protected 禁止 允许 允许 封装
3 私有成员 private 禁止 允许 禁止 封装

2.3 按调用主体分类

序号 名称 关键字 调用主体
1 非静态成员 默认 类实例调用
2 静态成员 static 类调用

2.4 按是否有具体实现分类

序号 名称 关键字 具体实现
1 非抽象成员 默认
2 抽象成员 abstract
  • 类中只要有一个抽象方法,该类必须声明为抽象类abstract class
  • 严格来说未初始化的属性也应该算是抽象成员, 即: 抽象属性
  • 思考: 有抽象属性的类,为什么不需要定义为抽象类呢?
    • 普通属性通常会在类实例化通过构造方法进行初始化
    • 静态属性由类调用而没有实例化的机会,所以定义时通常已经初始化

2.5 按方法是否可重写

序号 类型 关键字 描述
1 可重写方法 默认 可由子类重写
2 最终方法 final 不允许子类重写

只有 "类和方法" 可声明为final, 属性不可以


3 类的分类

序号 类型 关键字 可实例化 可继承 可组合
1 常规类 class 允许 允许 允许
2 最终类 final 允许 禁止 允许
3 抽象类 abstract 禁止 允许 允许
4 特征类 trait 禁止 禁止 允许
5 接口类 interface 禁止 允许 允许
6 匿名类 new class{} 禁止 允许 允许

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表