导航:首页 > 编程语言 > phpselfstatic

phpselfstatic

发布时间:2023-03-18 01:56:03

1. php中this,self和static的区别

  1. PHP支持类和面向对象结构,PHP的类的静态函数和变量不与任何特定类的实例相关联(换句话说,一个对象)。

  2. 相反,静态函数和变量与类定义本身相关联。换言之,一个类的所有实例都共享相同的静态变量。在一个类的方法(函数)的上下文中,静态变量和函数被访问使用self::,在一个类的对象(实例)的上下文中使用其他方法和变量时用this。

  3. 静态函数只能使用静态变量,静态函数和变量的引用是通过 self::函数名() 和 self::变量名。上述实例中,静态变量的引用是由类名(exampleClass::$foo),或者self::(self::$foo),当在这个类的静态方法[称为 静态函数()]里使用时。类的正则函数和变量需要一个对象上下文来引用,他们不能脱离对象上下文而存在。对象上下文由$this提供。在上述函数中,$bar 是一个正则变量,所以它被 $obj->bar(上下文使用变量obj) 来引用,或者使用 $this->bar(再次在一个对象的方法里在一个对象上下文中) 来引用。

  4. self 不使用前面的 $,因为 self 不意味着是一个变量而是类结构本身。而 $this 引用一个特定的变量,所以有前面的 $ 。

2. 如何理解php中的后期静态绑定

使用的保留关键字:
static
定义:
static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。
self与static的区别:
self调用的就是本身代码片冲野段这个者坦类,而static调用的是从堆内存中提取出来,访问的是当前实例化的那个类(即static作用散嫌喊于当前调用的类)
示例一(在静态环境下)
<?phpclass A { public static function who() { echo __CLASS__;
} public static function test() { static::who(); // 后期静态绑定从这里开始
}
}class B extends A { public static function who() { echo __CLASS__;
}
}

B::test();?>输出结果是"B"

3. php中self的真正含义是什么为什么可以调用父类 的成员和方法 - PHP进阶讨论

self对应static$this是非static这两者总和相当于Java里面的thisparent相当于Java里面的super我问你
你要在子类中执行父类的构造器怎么执行?TankMe
发表于
2009-9-9
16:19[i]self是这个类。this是这个类现在创建的对象。而不是单纯的只指静态非静态。self从理论上在php里是可以调用帆丛任何东西的。。。php6可以支持直接调用静态和非静态。因为他是和::符配合的。。。只要是这个类里面侍判的任何成员和方法都能调态谈樱用。。。你把php所有错误提示关闭。就可以执行。。。我记得我以前测试过一下的。。。php5貌似会抛出一个warring。。我忘记当时测试的结果了。但是从文档上看到得这理论是可行的

4. PHP代码,能详细解释一下每行的意思么多谢了

php中类操作有几个关键字,$this, self, static, parent

$this很好区别,就是实例化后的对象,所以不能在静态方法里调用

classtestA{
public$name="name";
publicstaticfunctiontest(){
//出错!static方法不能使用this
echo$this->name;
}
}

self, static, parent 都是静态调用,后跟 :: 如果是变量,要加$

classtestA{
//属性也要定义成静态的,不然也是访问不了的
publicstatic$name="name";

public$mobile="";

publicstaticfunctiontest(){
//可以访问
echostatic::$name;

//不可访问
echostatic::$mobile
}
}

下面说一下三者区别

self 指代当前定义方法所在的类

static 后期静态绑定的类 ( 实际调用中是哪个类,就代表哪个类,不一定是方法定义所在的类 )

parent 这个也好区别,就是当前定义类的父类

classA{
publicstaticfunctionwho(){
echo__CLASS__;
}
publicstaticfunctiontest(){
static::who();//后期静态绑定从这里开始
}
}

classBextendsA{
publicstaticfunctionwho(){
echo__CLASS__;
}
}

B::test();

以上代码,输出 B

因为最后调用是从B 这个类调用的

classA{
publicstaticfunctionwho(){
echo__CLASS__;
}
publicstaticfunctiontest(){
self::who();
}
}

classBextendsA{
publicstaticfunctionwho(){
echo__CLASS__;
}
}

B::test();

以上代码,输出 A

因为调用who时指定了当前类,不管最终从哪里调用,都会调用到A里定义的方法

另外 ,这三个关键字可跟在new 后面,来实例化代表的类,就不用重复写类名,方便维护。

参考:php:后期静态绑定

学php可以多看看官方手册

下面我再简单解释下你发的代码。

你这个应该是thinkphp的model吧,init静态方法是model的初始化方法,是一个静态方法,主要用于勾子处理(事件绑定)。这个调用可以从thinkphp的model类中找到。

一般在定义方法时需要覆盖父类方法,都会调用一下 parent::method() 用于先执行父类的方法,除非特意屏蔽父类初始方法就不调用。

5. php面向对象编程self和static的区别

在php的面向对象编程中,总会遇到
class test{
public static function test(){
self::func();

static::func();
}

public static function func(){}
}
可你知道self和static的区别么?

其实区别很简单,只需要写几个demo就能懂:

Demo for self:

class Car
{
public static function model(){
self::getModel();
}

protected static function getModel(){
echo "This is a car model";
}
}
Car::model();
Class Taxi extends Car
{
protected static function getModel(){
echo "This is a Taxi model";
}
}
Taxi::model();
得到输出
This is a car model
This is a car model
可以发现,self在子类中还是会调用父类的方法

Demo for static

class Car
{
public static function model(){
static::getModel();
}

protected static function getModel(){
echo "This is a car model";
}
}

Car::model();

Class Taxi extends Car
{
protected static function getModel(){
echo "This is a Taxi model";
}
}

Taxi::model();
得到输出
This is a car model
This is a Taxi model
可以看到,在调用static,子类哪怕调用的是父类的方法,但是父类方法中调用的方法还会是子类的方法(好绕嘴。。)

在PHP5.3版本以前,static和self还是有一点区别,具体是什么,毕竟都是7版本的天下了。就颤消此不去了解了。

总茄迅结呢桥握就是:self只能引用当前类中的方法,而static关键字允许函数能够在运行时动态绑定类中的方法。

6. php 中使用private static 方法名 是什么意思

private 关键字声名 一个私有的方法或属性;定义了private的方法或属性在类的外部不能访问,只能在本类中使用。
类中使用私有方法:
$this->属性 或 方法()
static 关键字 是创建一个静态方法或静态属性;定义了static 的方法或属性不需要实例化就可以使用。
访问静态变量 类名::$变量名;
访问静态方法 类名::方法名();
访问本类静态变量 self::$变量名;
访问本类静态方法 self::方法名();
访问父类静态变量 parent::$变量名;
访问父类静态方法 parent::方法名();

7. php静态方法有什么好处,什么时候会用啊

  1. static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。

  2. static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”,如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。

  3. static关键字可以用来修饰变量、方法。

  4. 不经过实例化,就可以直接访问类中static的属性和static的方法。

  5. static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。

  6. static的属性,在内存中只有一份,为所有的实例共用。

  7. 使用self:: 关键字访问当前类的静态成员。一个类的所有实例,共用类中的静态属性。也就是说,在内存中即使有多个实例,静态的属性也只有一份。

  8. 静态属性直接调用 静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用。

8. php中$this,static,final,const,self 等几个关键字的用法

在类的内部方法访问已经声明为const及static的属性时,使用self::$name的形式。注意的是const属性的申明格式,const
PI=3.14,而不是const $PI=3.14
你的采纳是我前进的动力,
记得好评和采纳,互相帮助,
如果你认可我的回答,敬请及时采纳.
手机提问的朋友在客户端右上角评价点【满意】即可.
如果你认可我的回答,请及时点击【采纳为满意回答】按钮!

9. php中self与static的区别是什么

一个是自己,一个是静态数据,后期绑定中能体现出来

10. PHP 中 new static 和 new self 的区别

我贴一段代码 这个问题老外解释的比较好 = =
class A {
public static function get_self() {
return new self();
}

public static function get_static() {
return new static();
}
}

class B extends A {}

echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A
new self 那么获取的是当前代码段的这个类。 这个在class A 中写的方法 就算你在class B 中继承了,调用时返回的还是 class A 中的代码
new static PHP 5.3新增的方法,有点 $this 的味道,调用对应的 class 就返回 对应 class 的方法。

阅读全文

与phpselfstatic相关的资料

热点内容
android公网ip 浏览:609
要塞1地图放哪个文件夹 浏览:848
凡科建站怎么弄服务器 浏览:939
苹果手机怎么设置app播放 浏览:202
下载网站源码用什么浏览器 浏览:241
六线谱pdf 浏览:156
linuxmysqlsock 浏览:239
人教版数学pdf下载 浏览:460
文档安全加密系统 浏览:491
数控铣床编程简单数字 浏览:788
编程电缆如何重启 浏览:121
myqq命令行发消息 浏览:365
日产逍客怎么使用app升窗 浏览:503
安卓系统怎么快速删除微信内容 浏览:653
csharppython 浏览:409
程序员脖子按摩仪 浏览:562
小米桌面文件夹乱码怎么回事 浏览:858
点歌台app怎么连接 浏览:318
大学电脑编程学什么好 浏览:348
上哪里取消应用加密 浏览:172