phpthis访问方法
⑴ php继承的问题,调用父类的方法this指向问题。
我来说一说:
【一】…………public(仅有)属性和方法的继承…………
classa{
public$var='vara<br/>';
publicfunctionm(){
echo'funa<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
}
}
classbextendsa{
public$var='varb<br/>';
publicfunctionm(){
echo'funb<br/>';
}
}
$li=newb();
$li->run();
echo'<hr>';
var_mp($li);
输出:
varb
funb
————————————————————————————
object(b)[1]
public'var'=>string'varb<br/>'(length=11)
在这段代码中所表示的,是我们常见的一种继承方式,同为公有属性的$var 和公有方法m()
在这里,$var和m()都被继承并覆写,实例化过后,内存中只有一个$var实例,通过var_mp($li);我们可以看到它。
【二】…………private(私有)属性和方法的继承…………
classa{
private$var='vara<br/>';
privatefunctionm(){
echo'funa<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
var_mp($this);
echo'<br/><br/>';
}
}
classbextendsa{
private$var='varb<br/>';
privatefunctionm(){
echo'funb<br/>';
}
publicfunctionrun(){
echo$this->var;
$this->m();
var_mp($this);
echo'<br/><br/>';
parent::run();
}
}
$li=newb();
$li->run();
echo'<hr>';
var_mp($li);
输出:
varb
funb
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
.
.
vara
funa
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
.
————————————————————————————————
object(b)[1]
private'var'=>string'varb<br/>'(length=11)
private'var'(a)=>string'vara<br/>'(length=11)
这个时候,我们可以看到,在调用run方法时,首先它会调用到b类的私有属性$var 和私有方法m(),随后,又使用parent::run()调用父类的run()方法,我们可以看到,父类的run()方法调用后,它所调用的属性和方法,都是a类的两个私有属性和方法,这种形式,和你的问题一致;
而它与$this指向无关,我们可以在这里看到,两个$this都是指向b类。
而最有意思的是,在$li句柄中,我们却看到了两个属性!一个是b类的属性,一个是a类的属性,这两个属性同时存在着,那么,私有方法也自然是同时存在着。
【三】…………私有属性和方法能不能被继承…………
classa{
private$var='vara<br/>';
privatefunctionm(){
echo'funa<br/>';
}
}
classbextendsa{
publicfunctionrun(){
echo$this->var;
$this->m();
}
}
$li=newb();
$li->run();
输出:
Notice:Undefinedproperty:b::$varinE:...onLine9
Fatalerror:Calltoprivatemethoda::m()fromcontext'b'inE:...onLine10
这可以证明,私有属性和方法,无法被继承,所以,你的代码示例中所说,将a类的m()方法更改为private后,会显示aa的属性,也就可以理解明白了。
⑵ php中关于$this问题
方法内调用类属性,有:
$this->name
静态属性:
self::$name
用$this->$name的情况是:
$name = 'name';
$this->$name 这个等价于$this->name
⑶ php面向对象全攻略 (三)特殊的引用“$this”的使用
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();
修改一下上面的实例,让每个人都说出自己的名字,性别和年龄:
代码片段
复制代码
代码如下:
<?php
class
Person{
//下面是人的成员属性
var
$name;
//人的名字
var
$sex;
//人的性别
var
$age;
//人的年龄
//下面是人的成员方法
function
say(){//这个人可以说话的方法
echo
"我的名字叫:".$this->name."
性别:".$this->sex."
我的年龄是:".$this->age."<br>";
}
function
run(){
//这个人可以走路的方法
echo
"这个人在走路";
}
}
$p1=new
Person();
//创建实例对象$p1
$p2=new
Person();
//创建实例对象$p2
$p3=new
Person();
//创建实例对象$p3
//下面三行是给$p1对象属性赋值
$p1->name="张三";
$p1->sex="男";
$p1->age=20;
//下面访问$p1对象中的说话方法
$p1->say();
//下面三行是给$p2对象属性赋值
$p2->name="李四";
$p2->sex="女";
$p2->age=30;
//下面访问$p2对象中的说话方法
$p2->say();
//下面三行是给$p3对象属性赋值
$p3->name="王五";
$p3->sex="男";
$p3->age=40;
//下面访问$p3对象中的说话方法
$p3->say();
?>
输出结果
我的名字叫:张三性别:男我的年龄是:20
我的名字叫:李四性别:女我的年龄是:30
我的名字叫:王五性别:男我的年龄是:40
分析一下这个方法:
代码片段
function
say(){
//这个人可以说话的方法
echo
"我的名字叫:".$this->name."
性别:".$this->sex."
我的年龄是:".$this->age."<br>";
}
在$p1、$p2
和$p3
这三个对象中都有say()这个方法,$this
分别代表这三个对象,调用相应的属性,打印出属性的值,这就是在对象内部访问对象属性的方式,如果相在say()这个方
法里调用run()这个方法也是可以的,在say()这个方法中使用$this->run()的方式来完成调用。
⑷ php里面$this-> = 用法和意思
在访问类的时候可以用到$this->来访问该类里面的所有变量,或者函数,如果:该类里定义了一个变量名叫srvMobile的那么你就可以用$this->srvMobile=值,来到该类的srvMobile进行赋值,如果是函数的话也可以这样子调用,如:$this->fun();
⑸ php代码中的this什么作用
$this->变量名或方法名,指向类中的定义的变量或方法。你这里的var应该是一个变量,但是我们一般不用这个做变量名,因为var在php4中是关键字,php5之后用public代替var来申明一个公共变量。
⑹ php中this的含义
下面定义了一个Cart类
<?php
class Cart
{
var $items; // 购物车中的项目
// 把 $num 个 $artnr 放入车中
function add_item ($artnr, $num)
{
$this->items[$artnr] += $num;
}
// 把 $num 个 $artnr 从车中取出
function remove_item ($artnr, $num)
{
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
以一段代码说明问题,在一个类的定义内部,你无法得知使用何种名称的对象是可以访问的:在编写 Cart 类时,并不知道之后对象的名称将会命名为 $cart 或者 $another_cart。因而你不能在类中使用 $cart->items。然而为了类定义的内部访问自身的函数和变量,可以使用伪变量 $this 来达到这个目的。$this 变量可以理解为“我自己的”或者“当前对象”。因而 '$this->>items[$artnr] += $num' 可以理解为“我自己的物品数组的 $artnr 计数器加 $num”或者“在当前对象的物品数组的 $artnr 计数器加 $num”。
⑺ 在php中self与$this的分别
1、意思上的区别
self代表类,$this代表对象(self是引用静态类的类名,而$this是引用非静态类的实例名)
2、用法上的区别
能用$this的地方一定使用self,能用self的地方不一定能用$this。
(7)phpthis访问方法扩展阅读:
Python中self用法详解
1、以Student类为例,在Python中,定义类如下:
class Student(object):
pass
(Object)表示该类从哪个类继承下来的,Object类是所有类都会继承的类。
2、实例:定义好了类,就可以通过Student类创建出Student的实例,创建实例是通过类名+()实现:
student = Student()
3、由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法,例如在Student类时,把name、score等属性绑上去:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
⑻ php 静态方法为什么不能调用this
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”。
2. 静态变量的调用方法:只能使用slef:: 或者 类名:: 访问,不能使用$this访问;反之,类的成员变量未声明为const及static时,只能使用$this访问,不能用::访问。