php面向对象 笔记
程序员文章站
2024-03-17 16:43:34
...
类
创建类
<meta charset="utf-8">
<?php
//创建类 命名 大写 驼峰命名法
class Student{
// public 公共权限
// protected 只能在本类和子类中访问
// private 私有的 只能本类使用 类外 子类无权访问
//定义属性
public $name = "小明";
public $age = 18;
//定义方法
public function show ($name = "小明",$age = 18) {
return "{$name}的年龄为{$age}";
}
public function showThis(){
//php中 this 通过 $this 来使用 $this只能在成员方法中使用
echo "{$this->name}的年龄为{$this->age}";
}
}
实例化 创建对象
$a = new Student();
调用方法
echo $a->show("小红",24);
echo "<br/>";
$a->showThis();
echo "<br/>";
输出变量
echo $a->name;
echo "<br/>";
新增属性
$a->newData = "巴拉巴拉巴拉";
//打印查看
var_dump($a);
删除属性
unset($a->name);
var_dump($a);
定义类长量
- 常量 值永远不会变
- 常量就是类的常量与对象无关
- 常量在内存中只有一份 不会随着对象的增加而增加
- 常量可以被所有对象共享
- 常量必须大写
- 访问常量 类名:常量名
- :: 静态化调用方式
echo "<hr/>";
class Log{
const DB_LOCALHOST = "127.0.0.1";
const DB_USERNAME = "root";
const DB_PASSWORD = "root";
public function show() {
echo "主机名称:".Log::DB_LOCALHOST."<br/>";
echo "用户名称:".Log::DB_USERNAME."<br/>";
echo "用户密码:".Log::DB_PASSWORD."<br/>";
echo "<hr/>";
}
}
$b = new Log();
$b->show();
//常量无需实例化后才能调用
//直接 类名::常量名 即可调用
echo "主机名称:".Log::DB_LOCALHOST."<br/>";
echo "用户名称:".Log::DB_USERNAME."<br/>";
echo "用户密码:".Log::DB_PASSWORD."<br/>";
echo "<hr/>";
静态属性和静态方法
echo "静态属性与静态方法";
class Data{
//公共静态属性
public static $title = '18计算机三班';
//私有的静态方法
private static function showTitle() {
return "<hr/>";
}
public function show($name,$age) {
$text = $name."今年".$age."岁了";
$text.= Data::showTitle();
echo $text;
}
}
$c = new Data();
echo "<br/>";
$c->show("小明",18);
$d = new Data();
echo "<br/>";
$d->show("小红",24);
slef
关键字
- self 代表当前类 相当于$this代表当前对象
- $this通过->调用属性和方法
- self通过::调用常量、静态属性、静态方法
- $this只能用在成员方法中:self可以用在成员方法、静态方法中
class Data{
//公共静态属性
public static $title = '18计算机三班';
//私有的静态方法
private static function showTitle() {
return "<br/>";
}
public function show($name,$age) {
$text= self::$title;
$text.= self::showTitle();
$text.= $name."今年".$age."岁了";
echo $text;
}
}
$c = new Data();
echo "<hr/>";
$c->show("小明",18);
$d = new Data();
echo "<hr/>";
$d->show("小红",24);
构造方法
- 构造方法在new 的时候自动运行
public function __construct(){}
- 构造函数没有返回值 不支持参数返回
// 创建手机类
class Modile{
//在项目中 成员属性一般不设值
public $name; //名称
public $pinpai; //品牌
public $pirce; //价格
public $city; //产地 这里是形参 不是 成员属性
public function __construct($name,$pinpai,$pirce,$city){
$this->name = $name;
$this->pinpai = $pinpai;
$this->pirce = $pirce;
$this->city = $city;
}
public function show(){
$text = "手机名称:{$this->name}";
$text .= "<br/>手机品牌:{$this->pinpai}";
$text .= "<br/>手机价格:{$this->pirce}";
$text .= "<br/>手机产地:{$this->city}";
return $text;
}
}
$e = new Modile('华为P30','华为',8888.88,"深圳");
echo $e->show();
析构方法
- 当销毁一个对象前 自动调用
- 名称是固定的: __destruct()
- 析构方法没有参数 是成员方法
- 作用: 垃圾回收。列如:可以断开数据库的链接
//析构方法 代码结束自动销毁
class ClassA {
public function __destruct(){
echo "<br/>对象即将销毁";
}
}
$f = new ClassA();
echo "<br/>最后一行代码执行完毕";
// 销毁对象后
class ClassB{
public function __destruct(){
echo "对象即将销毁0.2";
}
}
$f = new ClassA();
echo "<hr/>";
unset($f);
echo "<br/>最后一行代码执行完毕0.2";
在线人数案例
- 构造人数加一 析构人数减一
//在线人数案例
class User{
//私有静态num
private static $num = 0;
public function __construct(){
self::$num++;
}
public function showNum(){
return self::$num;
}
public function __destruct(){
self::$num--;
}
}
$g = new User();
$h = new User();
$i = new User();
$j = new User();
$k = new User();
echo "<br/>当前在线人数为:".$g->showNum()."人";
上一篇: js03--函数、函数作用域!
下一篇: python进阶函数