php面向对象机制,PHP中的面向对象

PHP面向对象的语法,面向对象只可意会不可言传,万物皆对象:

定义类

1. 定义属性(变量)

2. 定义方法(函数)

3. 定义常量(类常量)

46e508babc3d

定义类

创建类对象(实例化)

46e508babc3d

创建类对象

使用对象

46e508babc3d

Snip20170306_4.png

1. 使用对象中的属性(变量)

2. 使用对象中的方法(函数)

3. 使用对象中的常量(类常量)

对象创建方式:

//方式0

$person1 = new C1();

//方式1

$CName = "C1";

$person3 = new $CName();

//方式2

$CName2 = new self;

//方式3

$person4 = new $person3;

对象传值

值传递:传递的时候拷贝一份传过去。默认方式。

引用传递:传递的就是本身,若修改本身也会被修改,需要加“&”。

46e508babc3d

与结论相反的结果

注意:默认方式是指传递,为什么打印结果是引用传递呢?其实确实拷贝出了新对象,但是新对象中的一个内部指针(指向具体指)却是被完全复制下来的,之前指向什么,拷贝内部指针后还会指向它,而这个数字就是内部指针指向的内容,如图:

46e508babc3d

Snip20170306_8.png

类中的方法:

class Person{

public $x = 1;

public $y = 1;

public $PI = 3.14;

function getXiebian($a,$b){

$s1 = $a*$a + $b*$b;

$s2 = pow($s1,0.5);

return $s2;

}

}

$p1 = new Person();

$xie1 = $p1->getXiebian(3,4);

echo "
斜边:".$xie1;

?>

方法中$this关键字

$this是一个“伪对象”,类似于iOS中的self

class Person{

public $name = "匿名";

public $age = 18;

//自我介绍方法

function introduce(){

echo "
我叫".$this->name;

echo "
年龄".$this->age;

}

}

$p2 = new Person();

$p2->name = "大牛";

$p2->introduce();

//打印结果:

//我叫大牛

//年龄18

?>

//获取某个对象所属的类名。结果只是一个类名字符串

get_class(对象名)

静态属性

在定义属性的时候,前面加上关键字:static。作用:一般属性的值隶属于一个类对象,静态属性是所有对象的“共有数据”。下面例子中可以证明:

class C2{

static $v1 = 10;

}

C2::$v1 = 100;

$s1 = C2::$v1;

echo "
s1 = $s1";

//输出结果:s1 = 100

$c1 = new c2();

echo "
".$c1::$v1;

//输出结果:100

$c1::$v1 = 200;

$c2 = new c2();

echo "
".$c2::$v1;

//输出结果:200

?>

静态方法

在方法名前添加static就变成了静态方法,静态方法属于类,不属于具体对象。使用方法和静态属性类似。

class S1{

public $v1 = 1;

static $v2 = 2;

static function showInfo(){

echo "
显示信息";

//错误写法:不能在静态方法里面调用对象属性,因为静态方法通过类名调用

//echo "v1 = ".$this->v1;

echo "v2= ".S1::$v2;

}

}

S1::showInfo();

self

代表当前类,通常只能在某个类的某个方法内部可以使用,代表该类,

self和$this的区别:self代表当前类,$this代表当前对象,所以静态方法中可以使用self,但不能使用$this。

class S2{

//返回这个类

static function getInstance(){

return new self;

}

}

echo "
";

$obj2 = S2::getInstance();

构造方法

构造方法是可理解为类的一个特殊方法,其作用是在实例化一个对象的同时,给该对象的属性赋值,使它创建完成后就具有了特定的属性值或者数据。

该方法名固定:__contruct();

该方法必须是普通方法(非静态)

定义构造方法后,创建对象必须以有构造方法的形式来实例化对象

class P{

public $name = "匿名";

public $age = 18;

function intro(){

echo "
名字:".$this->name;

echo "
年龄:".$this->age;

}

function __construct($n,$a){

$this->name = $n;

$this->age = $a;

}

}

//普通实例化

$p1 = new P();

$p1->name = "大牛弟弟";

$p1->intro();

//有构造方法的实例化

$p2 = new P('大牛',12);

$p2->intro();

?>

析构方法

构造方法在创建对象时自动调用,析构方法在销毁对象时自动调用,通常,php程序结束后,所有对象都会自动销毁(php内部具有垃圾回收机制)

析构方法通常不需要定义

析构方法不能手动调用,不能有参数

析构方法中可以用于清理一些php代码结束后不能清理的数据

先创建的对象后销毁,栈的概念

销毁时机:当没有指针指向这个对象时对象就会被销毁,或使用unset()强行销毁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值