PHP类声明|类的实例化|类的静态成员|类的扩展|trait与父类关联|trait冲突与优先级解决方案
16lz
2021-02-03
- 实例演示类声明,类的实例化,类的静态成员与类的扩展;
- 描述trait功能,以及trait与父类的区别与联系,并实例演示trait 的冲突与优先级的解决方案
一、类声明,类的实例化,类的静态成员与类的扩展
1.1类声明
一个文件只保存一个类,文件名中包含类名,
文件名:类名.class.php
类名:单词的首字母大写
[修饰类的关键字] class 类名 {
成员属性
成员方法
}
(1)成员属性,在类中声明的变量,称为成员属性。声明时,变量前面必须使用一个关键字,如使用public、private、static等关键字修饰,如不需要有特殊意义的修饰,则可使用var关键字
(2)成员方法,在类中声明的函数,称为成员方法。
1.2类的实例化
(1)类创建后,可以使用 new 运算符来实例化该类的对象
$变量名 = new 类名称;
对象引用$this
成员方法属于哪个对象,$this引用就代表哪个对象。
<?php
class Person {
var $name;
function say(){
echo 'my name is '.$this->name;
}
}
$user = new person; //实例化对象
$user->name = 'tianpenglaoshi'; //对象属性的赋值
$user->say(); //访问对象的成员方法
//输出:my name is tianpenglaoshi
(2)构造方法
构造方法的作用是为成员属性初始化;
构造方法是在对象创建完后,第一个自动调用的方法;
构造方法,方法名固定,在PHP4中构造方法名与类名一致;PHP5中是 __construct()
<?php
class Person {
var $name;
var $age;
var $mail;
function __construct($name='', $age=16,$mail='hr@tlbh@baidu.cn'){
$this->name = $name;
$this->age = $age;
$this->mail = $mail;
}
function ary(){
echo $this->name.$this->age.$this->mail;
}
}
$user= new person('黄蓉');
$user->ary();
//输出:黄蓉16hr@tlbh@baidu.cn
<?php
//类的属性和方法:
//1.public:公开的
//2.privote:私有成员,只有本类中使用
//3.protedcted:被保护的,仅限本类和子类访问
class Product{
//类的属性:
protected $price;
public $name;
//构造函数:
public function __construct($name,$price)
{
$this->name=$name;
$this->price=$price;
}
//类的方法
public function count():string
{
return "商品名称:$this->name,单价:$this->price";
}
};
$user = new Product("Redmi 10X",1899);
echo $user->count();
echo '<hr>';
echo $user->name;
图示:
1.3类的静态成员
static(静态)
1)static可以修饰成员属性和成员方法,不能修饰类;
2)用static修饰的成员属性,可以被同一个类的所有对象共享;
3)静态的数据是存在内存中的数据段中(初始化静态段);
4)静态的数据是在类每次加载时分配到内存中的,以后再用到类时就直接从数据段中获取;
5)静态成员要用类名去访问,不用对象去访问;
类名::静态成员属性名
类名::静态成员方法名()
6)如果在类中使用静态成员,可以使用self代表本类;
self::静态成员属性名
self::静态成员方法名()
7)静态方法(static修饰的方法),不能访问非静态的成员。7)静态方法(static修饰的方法),不能访问非静态的成员。**
<?php
class user
// 静态属性
{
public static $name;
public static $like;
// 静态方法
public static function show()
{
return 'My Name is '. static::$name .'. and I like:' . static::$like;
}
}
class user1 extends user
{
public static $name='Huangrong';
public static $like='Eight-diagram palm;
';
}
class user2 extends user
{
public static $name='Guojin';
public static $like='Swordsmanship';
}
echo user1::show();
echo '<hr>';
echo user2::show();
图示:
1.4类的扩展
<?php
require 'loader.php';
$staff = new Staff('马大哥',29);
// 访问类的静态属性
echo Staff::$name;
echo' <hr>';
// 访问类的静态方法
echo Staff::show();
echo' <hr>';
// 访问实例的静态方法
echo $staff->show();
// 不能访问实例的静态属性
更多相关文章
- PHP面向对象编程
- 0202-类声明及类的实例化,静态成员与类的扩展,trait与父类的区别
- 类声明-实例化-成员-继承-trait特征类
- PHP类与对象的基础概念
- 数组排序-合并-成员统计-交差并补
- 数组的排序, 数组的合并, 数组成员的统计
- Android(安卓)NDK 开发教程四:TwoLibs示例
- C调用Java
- android逆向学习,笔记(四)IDA Pro Android(安卓)静态分析