php--opp--7.特殊的引用”$this“的使用

现在我们知道了如何访问对象中的成员,是通过”对象->成员”的方式访问的,这是在对象的外部去访问对象中成员的形式, 那么如果我想在对象的内部,让对象里的方法访问本对象的属性, 或是对象中的方法去调用本对象的其它方法这时我们怎么办?因为对象里面的所有的成员都要用对象来调用,包括对象的内部成员之间的调用,所以在PHP里面给 我提供了一个本对象的引用$this, 每个对象里面都有一个对象的引用$this来代表这个对象,完成对象内部成员的调用, this的本意就是“这个”的意思, 上面的实例里面,我们实例化三个实例对象$P1、 $P2、 $P3,这三个对象里面各自存在一个$this分别代表对象$p1、$p2、$p3 。

通过上图我们可以看到,$this就是对象内部代表这个对象的引用,在对象内部和调用本对象的成员和对象外部调用对象的成员所使用的方式是一样的。

$this->属性: $this->name; $this->age; $this->sex;

$this->方法 :$this->say(); $this->run();

修改一下上面的实例,让每个人都说出自己的名字,性别和年龄:

01    <?php
02    class Person
03    {
04        // 下面是人的成员属性
05        var $name; //人的名子
06        var $sex; //人的性别
07        var $age; //人的年龄
08
09        // 下面是人的成员方法
10        function say() // 这个人可以说话的方法
11        {
12            echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age;
13        }
14
15        function run() // 这个人可以走路的方法
16        {
17            echo "这个人在走路";
18        }
19    }
20
21    $p1 = new Person(); // 创建实例对象$p1
22    $p2 = new Person(); // 创建实例对象$p2
23    $p3 = new Person(); // 创建实例对象$p3
24
25    // 下面三行是给$p1对象属性赋值
26    $p1->name = "张三";
27    $p1->sex = "男";
28    $p1->age = 20;
29
30    // 下面访问$p1对象中的说话方法
31    $p1->say();
32
33    // 下面三行是给$p2对象属性赋值
34    $p2->name = "李四";
35    $p2->sex = "女";
36    $p2->age = 30;
37
38    // 下面访问$p2对象中的说话方法
39    $p2->say();
40
41    // 下面三行是给$p3对象属性赋值
42    $p3->name = "王五";
43    $p3->sex = "男";
44    $p3->age = 40;
45
46    // 下面访问$p3对象中的说话方法
47    $p3->say();
48    ?>

输出结果为:

我的名子叫:张三 性别:男 我的年龄是:20我的名子叫:李四 性别:女 我的年龄是:30我的名子叫:王五 性别:男 我的年龄是:40

分析一下这个方法:

1    function say() // 这个人可以说话的方法
2    {
3        echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age;
4    }

在$p1、$p2和$p3这三个对象中都有say()这个方法,$this分别代表这三个对象, 调用相应的属性,打印出属性的值,这就是在对象内部访问对象属性的方式, 如果相在say()这个方里调用run()这个方法也是可以的,在say()这个方法中使用$this->run()的方式来完成调用。

转载:原文地址:php-note.com 

时间: 2024-08-08 17:48:11

php--opp--7.特殊的引用”$this“的使用的相关文章

解决Block弱引用可能造成的循环引用

1.__weak typeof(self) myself = self; 2.__weak RecommendViewController *recommendVC = self; 以上两种写法是一种效果 typeof(self) 是获取到self的类型,这样定义出的weakSelf就是和self一个类型的, 加上__weak是建立一个若引用,整句就是给self定义了一个若引用性质的替身;这个一般用在使用block时会用到,因为block会copy它内部的变量,可能会造成引用循环,使用__wea

跟着百度学PHP[4]OOP面对对象编程-5-内部引用$this

$this就是对象内部代表这个对象的引用 可以调用被封装的方法或者属性! <?php class Person{ private $name; private $age="21"; var $sex; function play(){ echo "他正在玩儿呢"; } private function Hello(){ //使用private封装hello方法.该方法不可直接调用.但是可以在内部使用$this调用. echo "这个是被封装的内容&q

【IOS学习基础】weak和strong、懒加载、循环引用

一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成引用计数加1:而strong则相当于OC中规定retain,它会造成引用计数加1”. ARC的原理:只要还有一个变量指向对象,对象就会保持在内存中.当指针指向新值,或者指针不再存在时,相关联的对象就会自动释放.这条规则对于实例变量.synthesize属性.局部变量都是适用的 strong指针能够保

等式转换(熟悉一下链表,指针引用)

1 /***************************************************************************** 2 *输入一个正整数X,在下面的等式左边的数字之间添加 + 号或者 - 号,使得等式成立. 3 *1 2 3 4 5 6 7 8 9 = X 4 *比如: 5 *12 - 34 + 5 - 67 + 89 = 5 6 *1 + 23 + 4 - 5 + 6 - 7 - 8 - 9 = 5 7 *请编写程序,统计满足输入整数的所有整数个数

Asp.Net MVC学习记录之“一个实体对象不能由多个 IEntityChangeTracker 实例引用”

原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. ? 1 2 3 4 5 var re = /\d/; console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1"

C++学习笔记之——内联函数,引用

本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫追风 一直想开始写C++的学习笔记,学习C++已经两个月了,今天开始写一下引用,内联函数,的一些概念和作用吧.那么开始吧! ????内联函数: 我们写的程序最终都是要用编译器,进行编译链接形成一段机器可以知道的二进制代码,接着存到一个内存中,这时候每一段程序代码都会有自己的一个地址,计算机按照地址增

BIP Requests Are Failing With Error &quot;OPP Error Oracle.apps.xdo.XDOException: Error Creating Lock Fil

In this Document   Symptoms   Cause   Solution   References Applies to: BI Publisher (formerly XML Publisher) - Version 12.1 to 12.2 [Release 12.1 to 12.2] Information in this document applies to any platform. Symptoms BiP Requests are failing: ERROR

bash算数运算&命令引用

1.bash脚本编程之算数运算 + - * / % declare -i num3=5 //直接声明为整数 declare -i num4=6 echo "$num3+$num4" //结果为5+6 (1) let c="$num1+$num2" (2) echo "$[$num1+$num2]" //$中括号和小括号,let,expr (3) echo "$(($sum1+$sum2))" (4) expr $num2 +

面向过程编程(OPP) 和面向对象编程(OOP)的关系

面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和面向对象的编程(OOP),给出这它们的定义的人很多,您可以从任何资料中找到很专业的解释,但以我的经验来看,讲的相对枯燥一点,不是很直观.除非您已经有了相当的积累,否则说起来还是比较费劲. 我是个老程序员出身,虽然现在的日常工作更多倾向了管理,但至今依然保持编码的习惯,这句话什么意思呢?我跟大家沟通应

Lambda&Java多核编程-6-方法与构造器引用

在Lambda&Java多核编程-2-并行与组合行为一文中,我们对Stream<Contact>里的每一位联系人调用call()方法,并根据能否打通的返回结果过滤掉已经失效的项. 应该注意到此时filter(..)中Lambda的写法有些特殊: // ....filter(Contact::call)// ... 按常理我们应该使用s -> s.call(),但是这里却将参数.箭头以及对参数调用方法全部用其类型Contact的方法标签(暂且这样称呼)call来代替,而这个::就跟