普通类 以关键字“class”定义,后跟类名。
类名不能是PHP预留关键字,必须以字母或下划线开头,每个类有属于自己的常量、方法、属性。
类的实例叫作对象,可通过关键字“new”来实例化对象。
说明:
1)类的属性和方法有三个访问级别,分别为public(公有), protected(受保护)或private(私有)。
类的外部不能直接调用protected(受保护)或private(私有)的方法和属性。
2)类的属性有普通属性和静态、常量属性,静态、常量属性则分别用关键字“static”和“const”声明。
3)类的普通方法、属性被自己的成员函数调用时可使用“$this->”,静态方法及静态属性也可通过这种方式访问。
4)类的常量属性、静态属性、静态方法,通过“self::”调用。非静态的方法也可以通过“::”调用,但是非静态的属性不能通过“::”访问。
class A{
const MYCONST = 1; //常量属性
static $b = 2; //静态属性
var $a = '3'; //普通属性
public $c = 'c is public';
protected $d = 'd is protected';
private $_d = '_d is private';
protected static $e = 'protected static';
private static $_e = 'private static';
public function b(){
var_dump('public method');
var_dump($this->c);
var_dump(self::e());
}
protected function c(){
var_dump('protected method');
}
private function _d(){
var_dump('private method');
}
static function e(){
var_dump(self::$b);
var_dump(self::MYCONST);
}
static function f(){
//不能通过“::”访问非静态的属性 PHP Fatal error: Uncaught Error: Access to undeclared static property: A::$a
//var_dump(self::$a,self::$c);
var_dump($this->a,$this->c);
}
}
$a = new A();
//属性调用
var_dump($a->c);
//var_dump($a->d);//PHP Fatal error: Uncaught Error: Cannot access protected property A::$d
//var_dump($a->_d);PHP Fatal error: Uncaught Error: Cannot access private property A::$_d
var_dump(A::MYCONST);
var_dump(A::$b);
//var_dump(A::$e);//Fatal error: Uncaught Error: Cannot access protected property A::$e
//var_dump(A::$_e);//Fatal error: Uncaught Error: Cannot access private property A::$_e
//var_dump(A::$f);//Fatal error: Uncaught Error: Access to undeclared static property: A::$e
//方法调用
$a->b();
//$a->c();//Fatal error: Uncaught Error: Call to protected method A::c()
//$a->d();//Fatal error: Uncaught Error: Call to undefined method A::d()
//$a->_d();//Fatal error: Uncaught Error: Call to private method A::_d()
A::e();
A::f();
A::b();
<?php
class Student {
// 类里的属性、方法和函数的访问权限有 (函数和方法是同一个概念)
// private 私有的 protected 受保护的 public 公有的
// 类常量 没有访问权限修饰符
const STUDENT = 'Tom';
// 属性
public $stu_name;
// 静态属性
public static $stu_num = 1;
// 方法
public function stuFunction() {
echo 'non_static_function',PHP_EOL;
}
// 静态方法
public static function static_stuFunction() {
echo 'static_function',PHP_EOL;
}
// 构造函数 创建对象时自动调用
public function __construct($stu_name) {
$this->stu_name = $stu_name;
echo '__construct',PHP_EOL;
}
// 析构函数 销毁对象时自动调用
public function __destruct() {
echo '__destruct',PHP_EOL;
}
}
// 实例化类对象
$object = new Student('Tom');
// 对象调用属性
echo $object->stu_name,PHP_EOL;
// 对象调用静态属性
echo $object::$stu_num,PHP_EOL;
// 类调用静态属性
echo Student::$stu_num,PHP_EOL;
// 使用对象分别调用方法和静态方法
$object->stuFunction();
$object->static_stuFunction();
$object::stuFunction();
$object::static_stuFunction();
// 使用类分别调用方法和静态方法
Student::stuFunction();
Student::static_stuFunction();
// 类调用类常量
echo Student::STUDENT,PHP_EOL;