类是变量与浸染于这些变量的函数的凑集。
工具:实际存在该类事物中每个实物的个体。
$a =new User(); 实例化后的$a。
创建工具的过程称为实例化。

例:computer.php

<?php

php类如何使用PHP 应用类 SQL

class Computer{ //创建一个Computer类

var $price=3000; //成员变量 定义价格变量$price为3000 属性

function getPrice(){ //成员函数 创建一个获取价格封装在getPrice方法(函数)中

echo 'price: '.$this->price; //打印价格 this是指向当前工具的指针

}

}

$mypc = new Computer(); //创建一个实例

$mypc->getPrice ();//调用getPrice方法获取价格

?>

结果:

2.定义类

利用class关键字来创建一个类,类名的首字符一样平常要大写。

类定义构造如下:

class 类名 [extends 父类名]

{

成员变量列表

成员函数列表

}

方括号中的内容为可选内容。

例:class.php

<?php

class Super{ //创建 Super类

}

class Sub extends Super { //创建Sub类,并继续父类Super

var $p1 = \"大众Hello p1!\公众;//成员变量

function show(){ //成员函数 show方法

echo $this->p1; //$this当前工具

}

}

$print = new Sub(); //实例化

$print -> show();//调用show方法打印

?>

结果:

3.创建工具与销毁工具

例:create_destroy_obj.php

<?php

class Obj{

}

$object1 = new Obj(); //创建一个新的工具,$object1的引用计数加1

$object2 = $object1; //引用复制,$object1的引用计数即是2,$object2的引用计数即是1

unset($object1); //销毁工具$object1,$object1的引用计数减1,但引用计数并不为0,$object1中成员变量内存空间并没有开释

unset($object2); //销毁工具$object2,$object2的引用计数减1,引用计数为0,此时自动开释所有内存空间

?>

4.类的成员变量与成员函数

在类中定义成员变量(属性),只要在变量名前加public(公有)、private(私有)或者proteced(保护)类型关键词润色。

在类中定义函数即成员函数(方法),它的定义方法和一样平常函数基本相同,利用function关键字声明,并在function关键字前加public(公有)、private(私有)或者proteced(保护)类型关键词润色。

例:function.php

<?php

class Super{ //创建Super类

private $p1 = 'hello p1!'; //成员变量 私有 $p1 属性

public function show(){ //成员函数 show()方法 公有

echo $this->p1; //$this指当前工具

}

}

class Sub extends Super{//创建Sub类 并继续父类Super

private $p2 = 'hello p2!'; //成员变量 私有 $p2 属性

public function show(){//成员函数 show()方法 公有

echo $this->p2;//$this指当前工具

}

}

$s = new Sub(); //创建实例

$s->show(); //调用show()方法

?>

结果:

5.类的访问掌握

浸染域

全局

同一个类

子类

public

private

protected

例:access.php

<?php

class Super { //创建一个Super类

private $p1 = \"大众Hello p1!\"大众; //成员变量 属性 私有 $p1

protected $p2 = \"大众Hello p2!\"大众; //成员变量 属性 保护 $p2

public $p3 = \"大众Hello p3!\"大众; //成员变量 属性 公有 $p3

function show () { //成员函数 show方法

echo 'super:'.$this->p1.\公众<br>\"大众; //this指当前工具 打印super:Hello p1

echo 'super:'.$this->p2.\"大众<br>\"大众; //this指当前工具 打印super:Hello p2

echo 'super:'.$this->p3.\"大众<br>\公众; //this指当前工具 打印super:Hello p3

}

}

class Sub extends Super { //创建一个Sub 父类Super

private $p4 = \"大众Hello p4!\公众;//成员变量 属性 私有 $p4

function show() { //成员函数 show方法

Super::show();//调用父类 show方法 打印super:Hello p1 super:Hello p2 super:Hello p3

echo 'sub:'.$this->p1.\公众<br>\公众; // $p1未定义 无法调用父类Super 私有成员变量 打印 sub:

echo 'sub:'.$this->p2.\"大众<br>\"大众; //打印sub:Hello p2

echo 'sub:'.$this->p3.\"大众<br>\"大众; //打印sub:Hello p3

echo 'sub:'.$this->p4.\"大众<br>\"大众;//打印sub:Hello p4

}

}

$s1 = new Super();//实例化

$s1->show (); //调用show方法

$s2 = new Sub();//实例化

$s2->show();//调用show方法

//echo 'global:'.$s1->p1.\"大众<br>\公众; //访问失落败 在类的外部,不能访问类的私有和保护类型的成员变量

//echo 'global:'.$s1->p2.\"大众<br>\公众; //访问失落败

echo 'global:'.$s1->p3.\"大众<br>\公众; // 打印 global: Hello p3

echo 'global:'.$s2->p1.\"大众<br>\"大众; //无效数据 由于类Sub中没有定义变量$p1,以是输出了空值

//echo 'global:'.$s2->p2.\"大众<br>\公众; //访问失落败

echo 'global:'.$s2->p3.\"大众<br>\"大众; //打印 global: Hello p3

//echo 'global:'.$s2->p4.\"大众<br>\"大众; //访问失落败

?>

结果:

6.类的布局函数

布局函数

void __construct ([ mixed $args [, $... ]] )

布局函数可以接管参数,能够在创建工具时赋值给工具属性

布局函数可以调用类方法或其他函数

布局函数可以调用其他类的布局函数

PHP 5 允行开拓者在一个类中定义一个方法作为布局函数。
具有布局函数的类会在每次创建工具时先调用此方法,以是非常适宜在利用工具之前做一些初始化事情。

布局函数格式如下:

class 类名 [extends 父类名] {

[public/private/protected] function __construct()

{

}

}

之前已经知道类的成员变量和成员方法都可以被继续,类的布局函数也能被子类继续。

例:construct.php

<?php

class Super { //创建一个Super类

protected $p1; //成员变量 保护 $p1

public function __construct() //布局函数 公有 注:布局函数的关键词construct前面有两个下划线,如果只有一个下划线,将不会输出任何结果

{

$this->p1 = \"大众Hello p1!<br>\"大众;//$this当前工具 Hello p1!

echo $this->p1;// Hello p1!

}

}

class Sub extends Super { //创建一个Sub类 父类Super

}

$s1 = new Super();//创建实例 打印Hello p1! 布局函数在类被实例化时调用

$s2 = new Sub();//创建实例 继续父类 打印 Hello p1!

?>

结果:

例:construct2.php

这个例子中的父类和子类都定义告终构函数,当子类的工具被创建后,将调用子类的布局函数,而不会调用父类的布局函数。

<?php

class Super { //创建一个Super类

protected $p1; //成员变量 保护 $p1

public function __construct()//布局函数 公有 注:布局函数的关键词construct前面有两个下划线,如果只有一个下划线,将不会输出任何结果

{

$this->p1 = \"大众super::Hello p1!<br>\"大众;//$this当前工具 super::Hello p1!

echo $this->p1; //打印super::Hello p1!

}

}

class Sub extends Super { //创建一个Sub类 父类Super

public function __construct()//布局函数 公有

{

//parent::__construct();//调用父类布局函数 打印super::Hello p1!

$this->p1 = \公众sub::Hello p1!<br>\公众;//$this当前工具sub::Hello p1!

echo $this->p1;//打印sub::Hello p1!

}

}

$s2 = new Sub(); //实例化 只调用子类布局函数 打印sub::Hello p1!

?>

结果:

例:construct3.php

用 parent::__construct();//调用父类布局函数,而不是parent->__construct()

就可以在子类中调用父类函数。

class Super { //创建一个Super类

protected $p1; //成员变量 保护 $p1

public function __construct()//布局函数 公有 注:布局函数的关键词construct前面有两个下划线,如果只有一个下划线,将不会输出任何结果

{

$this->p1 = \公众super::Hello p1!<br>\公众;//$this当前工具 super::Hello p1!

echo $this->p1; //打印super::Hello p1!

}

}

class Sub extends Super { //创建一个Sub类 父类Super

public function __construct()//布局函数 公有

{

parent::__construct();//调用父类布局函数 打印super::Hello p1!

$this->p1 = \"大众sub::Hello p1!<br>\公众;//$this当前工具sub::Hello p1!

echo $this->p1;//打印sub::Hello p1!

}

}

$s2 = new Sub(); //实例化 打印super::Hello p1! 打印sub::Hello p1!

?>

结果:

7.类的析构函数

析构函数是类的一个分外的函数,PHP将在工具销毁前调用这个函数。
析构函数用于开释类中的数据资源,在默认情形下,PHP仅仅开释工具的成员变量所占用的内存。

析构函数的格式如下:

class 类名 [extends 父类名]

{

[public/private/protected] function __destruct()

{

}

}

例:destruct.php

<?php

class Super { //创建一个Super类

protected $p1; //成员变量 保护 $p1

public function __construct()//布局函数 公有

{

$this->p1 = \"大众Hello p1!<br>\"大众;//$this当前工具 Hello p1!

echo $this->p1; //打印Hello p1!

}

public function __destruct()//析构函数 公有

{

echo 'desturct super <br>'; //打印desturct super

}

}

class Sub extends Super { ////创建一个Sub类 父类Super

public function __destruct()//析构函数 公有

{

echo 'destruct sub <br>';//打印destruct sub

}

}

$s1 = new Super();//创建实例 //打印Hello p1!

$s2 = new Sub(); //创建实例 继续父类 打印Hello p1!

//程序结尾自动调用析构函数,首先调用的是Super析构函数 打印desturct super 然后调用Sub类析构函数 打印destruct sub 上面实例化对调,析构函数在结尾处次序也对调

?>

结果:

8.类的静态成员变量

在php中,访问类的方法/变量有两种方法:

1). 创建工具$object = new Class(),然后利用”->”调用:$object->attribute/function,条件是该变量/方法可访问。

2). 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。
但是有条件条件:

A. 如果是变量,须要该变量可访问。

B. 如果是方法,除了该方法可访问外,还须要知足:

b1) 如果是静态方法,没有分外条件;

b2) 如果是非静态方法,须要改方法中没有利用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。

然后我们再看一下利用$object->… 和利用class::… 都有什么差异:

1). 利用$object->… ,须要实行布局函数创建工具;

2). 利用class::… 调用静态方法/变量,不须要实行布局函数创建工具;

3). 利用class::… 调用非静态方法/变量,也不须要实行布局函数创建工具。

然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?

差异还是显然存在的,如下:

1. 静态变量

静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也便是说,所有的实例共享这个成员。

2. 静态方法

静态方法可以直策应用class::… 来调用,而非静态方法须要知足一定限定条件才能利用class::.. 的方法调用,如之前所述

例:static.php

<?php

class MyStatic{ //创建一个MyStatic类

private static $result = 0; //成员变量 私有 静态变量 $result为0

public function add($x){ //成员函数 公有 add函数 形参$x

MyStatic::$result = MyStatic::$result + $x; //此处为静态成员变量的调用办法,静态变量在没有实例前就可以调用

}

public function sub($x){ //成员函数 公有 sub函数 形参$x

MyStatic::$result = MyStatic::$result - $x;

}

public function getResult()//成员函数 公有 getResult函数

{

return MyStatic::$result; //返回结果

}

}

$st = new MyStatic();//创建实例

$st->add(5); //0+5=5

$st->sub(3); //5-3=2

echo 'result: '.$st->getResult();//打印result:2

?>

结果:

9.类的静态成员函数

静态成员函数的浸染类似于静态成员变量,它为类的所有工具做事,而不是对仅有某个特定工具做事,它相称于全局函数浸染。
当一个类被创建时,静态成员函数也被创建,此时类和静态成员函数是干系联的。

例:staticfunction.php

<?php

class MyStatic{ //创建一个MyStatic类

private static $i = 1; //私有 静态成员变量 $i为1

public static function add($x){ // 公有 静态成员函数 add 形参$x

echo self::$i + $x; //自引用

}

}

$st = new MyStatic();//创建实例

$st->add(2);// 1+2=3 打印3

?>

结果:

<?php

class MyStatic{ //创建一个MyStatic类

private static $i = 1; //私有 静态成员变量 $i为1

public static function add($x){ // 公有 静态成员函数 add 形参$x

echo $this->i + $x; //在静态方法中不能调用非静态的方法。
静态方法只能调用静态成员变量

}

}

$st = new MyStatic();//创建实例

$st->add(2);//

?>

结果:

注:在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须利用操作符::,反之如果被引用的变量或者方法没有被声明成const或者static,那么就必须利用操作符->。

其余,如果从类的内部访问const或者static变量或者方法,那么就必须利用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须利用自引用的$this。

例:staticfunction2.php

<?php

class MyStatic{ //创建一个MyStatic类

private static $i = 1;//私有 静态成员变量 $i为1

private function inc(){ //私有 成员函数 inc

self::$i = self::$i + 1; //自引用 自加 1+1

}

public static function add($x){//公有 静态成员函数 add 形参$x

//$this->i; //在静态方法中不能调用非静态的方法。

self::inc();//静态函数add调用非静态函数inc时,利用self::inc格式,如果利用$this->inc()的格式,将报错不能利用$this

echo self::$i + $x; //打印 2+$x

}

}

$st = new MyStatic();//创建实例

$st->add(2);//打印 2+2 =4

?>

结果:

若$this->i; 代替self::inc();

则结果:提示不能利用$this来调用

10.类中的常量

在PHP中利用const关键字表示常量,常量一样平常要写大写,如果常量有多个单词组成,利用下划线分开。
常量的调用办法和静态变量相同,利用::符号调用。

例:const.php

<?php

class MyConst{ //创建 MyConst类

const PI = 3.14; //定义常量PI为3.14

private $result = 0; //私有 成员变量 $result 为0

public function area($r){ //公有 成员函数area 形参$r

$this->result = self::PI$r$r;//如果此处表达式写为PI$r$r,返回结果为0。
调用常量利用self::PI的办法,self表示当前的类名

echo 'area: '.$this->result; //打印结果

}

}

$cst = new MyConst(); //实例化

$cst->area(2);//3.1422=12.56

?>

结果:

常量只能被赋值一次,如果再给常量赋第二次的值将会出错。

例:const2.php

<?php

class MyConst{ //创建MyConst类

const I = 1; //定义常量I为1 定义常量时,不须要在常量名前加$,这是常量和变量的差异

}

echo 'I = '.MyConst::I; //打印 I=1

//MyConst::I = 2;

?>

结果:

加上MyConst::I = 2;就会报错。

请大家多多关注,感谢!
本文只供学习利用,请勿其他用场!