PHP笔记_7(面向对象—》类、类的创建、构造方法、成员方法)

发布时间:2024-11-17

该笔记是关于韩顺平老师PHP课程的笔记

PHP面向对象编程—类与对象 PHP面向对象编程—构造方法 学习目标: 1、 2、 3、 4、

初步掌握PHP中的类和对象 各种变量在内存中的存在形式分析 什么是成员属性和成员方法 掌握构造方法和析构方法

该笔记是关于韩顺平老师PHP课程的笔记

//类名的命名方式:首字母大写,使用驼峰发,例如MyCatWork,而不要使用

my_cat_work

对象赋值:对象名—>属性名 = 值;

该笔记是关于韩顺平老师PHP课程的笔记

如果有一个文件,专门用于定义类,则命名规范应当这样: 类名.class.php

以下的图片是类和对象在内存中的存储的分析图:

class person { public $name; public $age; }

$a = new person(); $a->name = "小明"; $a->age = 20; $b = $a;

该笔记是关于韩顺平老师PHP课程的笔记

echo $a->name.'||'.$a->age.'<br>'; echo $b->name.'||'.$b->age.'<br>';

以上代码的输出结果是相同的:小明||20 小明||20

分析如下:堆区是存放大数据的,比如对象;栈区存放的是小型数据,比如float、int等类型的数据;这句代码$a = new person();在栈区中创建一个对象,并且$a存放的是一个地址,$b = $a;这句代码,相当于是将$a中存放的地址赋值给$b,这样就使得$b和 $a指向的是同一个地址,因此输出的内容也是一样的。

如果将上面的代码变动下; 在$b = $a;后面加上这一句$b->age = 890;然后输出$b->age.和$a->age.

echo '$b->age='.$b->age.'<br>'; echo '$a->age='.$a->age.'<br>';

输出的结果:$b->age=890 $a->age=890 (结果是一样的) 分析:上面已经分析$b和 $a指向的是同一个地址,那么$b->age = 890;该句代码对于$b指向的内容进行更改,而$a和$b指向的是同一个地址,因此输出的结果自然是相同的

知识点:给函数传递一个对象,具体是传什么?【函数调用的时候,代码运行,开辟的是新栈】(代码如下) class person { public $name; public $age; }

$p1 = new person(); $p1->name = "对象"; $p1->age = 30;

function test1 ($change) { $change->name = "想回家"; }

test1($p1);

echo $p1->name;

以上的代码的输出结果是:想回家

分析:给函数传递一个对象,传递的是对象的地址,因此这句代码$change->name = "想回家";就对$p1->name = "对象";这句代码的值进行修改,即$p1->name的值为“想回家”。

知识点总结:如果给一个函数传递一个对象,实际上传递的是一个地址

该笔记是关于韩顺平老师PHP课程的笔记

//如果给一个函数传递的是基本数据类型,那么传递的是什么 $a = 50; //整形 $c = 45.55; //小数

$d = "hello,word"; //字符串 $bool = true; //布尔类型

$arr = array(43,"你好",96.69); //数组 function test2 ($b1, $b2, $b3, $b4, $barr) { $b1 = 90; //整形 $b2 = 99.9999; //小数 $b3 = "how,are,you"; //字符串 $b4 = false; //布尔类型 $barr[0] = 1314; //数组 }

test2($a,$c,$d,$bool,$arr);

echo '$a(50) = '.$a.'<br/>'; echo '$c(45.55) = '.$c.'<br/>';

echo '$d (hello,word)= '.$d.'<br/>'; echo '$bool (true)= '.$bool.'<br/>'; echo 'arr[0] (43)= '.$arr[0].'<br/>';

输出的结果是: $a(50) = 50

$c(45.55) = 45.55

$d (hello,word)= hello,word $bool (true)= 1 arr[0] (43)= 43

对上面的代码加上去地址符后的输出结果:

$a(50) = 90

$c(45.55) = 99.9999

$d (hello,word)= how,are,you $bool (true)= arr[0] (43)= 1314

分析:通过上面的例子可以的出,如果给一个函数传递的是基本数据类型,传递的就不是地址,而是变量的值。

知识点总结:在默认的情况下如果给一个函数传递的是基本数据类型,实际上传递的是变量的值。如果要传递地址,只

该笔记是关于韩顺平老师PHP课程的笔记

要在函数的形式参数中加上去地址符【&】就可。

▲ 疑问(△面试中会经常遇到的)代码如下:

$arr = array($a,$b); $a = array(12, 15, 19); $b = array(20, 25, 99); print_r($arr);

结果是:出现notice错误,并且打印出Array ( [0] => [1] => )

如果将上面的代码改变如下: $a = array(12, 15, 19); $b = array(20, 25, 99); $arr = array($a,$b); print_r($arr);

输出结果是:Array ( [0] => Array ( [0] => 12 [1] => 15 [2] => 19 ) [1] => Array ( [0] => 20 [1] => 25 [2] => 99 ) )

总结:只有在定义$a和$b后才能够这样使用$arr = array($a,$b);否则会报错

该笔记是关于韩顺平老师PHP课程的笔记

请看下面的案例: class Pig { public $name; public $weight;

该笔记是关于韩顺平老师PHP课程的笔记

public $age; public function addWeight($a) { //$weight = $weight +$a;//这里PHP会认为是重新定义了一个新的变 量 $this->weight = $this->weight +$a;//应该在前面加上$this } }

$pig1 = new Pig(); $pig1->weight = 100; $pig1->addWeight(10);

echo "猪的体重".$pig1->weight;

输出结果是:猪的体重

110

在PHP5中可以有两种形式的构造方法如上图的3和4;但优先选择4这种方法

该笔记是关于韩顺平老师PHP课程的笔记

this就是对象本身,即调用对象的地址

一个类只能有一个构造方法

该笔记是关于韩顺平老师PHP课程的笔记

关于构造方法(构造函数)的一些知识点的代码如下: class Person { public $name; public $age; //构造方法,如果没有该构造方法,其实PHP有默认的一个构造方法 /*public function __construct($iname,$iage) { $this->name = $iname; $this->age = $iage; }*/ //php默认的构造方法如下,注:如果没有修饰符,其实PHP已经默认修饰符为public function __construct( )//注意:一个类只能有一个构造方法 {

该笔记是关于韩顺平老师PHP课程的笔记

}

}

//$p1 = new Person();//这样创建一个对象是错的,因为创建了一个构造方法,所以在创建的时候要给其默认值

$p1 = new Person("小明",30);//正确的创建一个对象的方式,注:谁引用,$this就是代表该对象的地址

$p1 = new Person();//在默认的构造方法下,这样创建一个对象是正确的,不会报错

echo $p1->name;

PHP笔记_7(面向对象—》类、类的创建、构造方法、成员方法).doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219