当只有一个类,没有任何继承关系的时候,这俩是一样的,也就是返回当前类的实例对象 当存在继承关系的时候,两者有区别 比如 new self在父类里,调用的时候会返回当前这个类的实例对象 比如 new static...在父类里,调用的时候会返回根据当前调用类,返回当前调用类的实例对象 <?...function getSelf() { return new self(); } public static function getStatic() {...return new static(); } } class Son extends Father {} ?...都是使用Son类调用,self那个返回的Father的对象 ,static是Son的对象
在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...在PHP5.3版本以前,static和self还是有一点区别,具体是什么,毕竟都是7版本的天下了。就不去了解了。...总结呢就是:self只能引用当前类中的方法,而static关键字允许函数能够在运行时动态绑定类中的方法。
,用来访问当前对象的非静态变量和非静态方法。...// 小红 $p::$name = "小明"; $p::getName(); // 小明 $p2::getName(); // 小明 self 和 this 不同,它指向类本身,不指向任何实例化对象...,一般用来访问类中的静态变量和静态方法; 上例中 new 了两个对象,并修改了其中一个对象的 name 属性,另一个对象的 name 属性值也改变了,所以说,self 是指向当前类的,和对象无关,所有的对象共用一个值...static 和 self 一样,都是指向类,一般都用来访问类中的静态变量和静态方法,但是又有一些不一样,具体来讲:self 写在哪个类里,实际调用的就是这个类;static 则是写在父类里,然后通过子类用到了这个...static,这个 static 指向的是这个子类,官方称之为 后期静态绑定 。
php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别。假定我们有class Car – 它有两个方法,model和getModel。...对于self的解释 关键字“self”的工作原理是:它会调用当前类(current class)的方法。因为model方法只在class Car中定义的,所以对它来说当前类就是class Car。...可以使用关键字static。 static关键字和延迟静态绑定(late static binding) 在PHP5.3中,加入了一个新的特性,叫做延迟静态绑定。它可以帮我们实现多态,解决上面的问题。...; } } 我们只是将class Car中的self替换成了static,并未对class Mercedes作修改。...php中的self和static 现在我们将例子中的self用static替换,可以看到,两者的区别在于:self引用的是当前类(current class)而static允许函数调用在运行时绑定调用类
简介 在使用PHP代码时,您可能经常会遇到parent::、static::和self::。但是当你第一次作为一个开发人员开始的时候,有时候你会很困惑,不知道它们是做什么的,以及它们之间的区别。...在我第一次作为开发人员开始工作后的很长一段时间里,我认为static::和self::是完全一样的。 parent::是什么?...static::是什么? 现在我们已经知道了self::的作用,让我们来看看static::。...然而,值得注意的是,如果connection属性在User类上不存在,它将回退到使用Model类上的属性。 什么时候使用self::或 static::?...现在我们对self::和static::之间的区别有了一个大致的了解,让我们快速介绍一下如何决定在自己的代码中使用哪一个。 这一切都取决于您正在编写的代码的用例。
下面我们举个栗子: class Father { public static function getSelf() { return new self(); } public static...这里面注意这一行 get_class(Son::getStatic()); 返回的是 Son 这个 class, 可以总结如下: self 返回的是 new self 中关键字 new 所在的类中...,比如这里例子的 : public static function getSelf() { return new self(); // new 关键字在 Father 这里 } 始终返回 Father...new static static 则上面的基础上,更聪明一点点:static 会返回执行 new static() 的类,比如 Son 执行 get_class(Son::getStatic())...返回的是 Son, Father 执行 get_class(Father::getStatic()) 返回的是 Father 而在没有继承的情况下,可以认为 new self 和 new static
(1)self调用自己方法,super调用父类方法 (2)self是类,super是预编译指令 (3)[self class]和[super class]输出是一样的 ...①当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找,然后调用父类的这个方法。...:),这个 selector 是从当前 self 的 class 的方法列表开始找的 setName,当找到后把对应的 selector 传递过去。...当编译器遇到[super setName:]时,开始做这几个事: 1)构建 objc_super 的结构体,此时这个结构体的第一个成员变量 receiver 就是子类,和 self 相同。...而第二个成员变量 superClass 就是指父类 调用 objc_msgSendSuper 的方法,将这个结构体和 setName 的 sel 传递过去。
"Main Phone"; } public static function getBrand(){ self::setBrand(); } } //huawei...这说明我们调用的 self 关键代表的是代码中它所在的那个类 即 Phone 这个类 //先实现一个手机工厂类 class Phone{ public static function...setBrand(); //将 self 改为 static } } //huawei 手机工厂 class HuaWei extends Phone{ public static function...关键字改为了 static 关键字,当值行代码时 这里的static代表的是当前正在执行的类 例如执行 HuaWei::getBrand(); 时 static 代表的是 HuaWei XiaoMi...::getBrand(); 时 static 代表的是 XiaoMi 这里总结一下 静态延迟加载的含义:把本来在定义阶段固定下来的表达式或变量,改在执行阶段再决定。
为什么80%的码农都做不了架构师?>>> ? self - 就是这个类,是代码段里面的这个类。...static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类。...还是看看老外的专业解释吧: self refers to the same class whose method the new operation takes place in....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())
一直在使用kotlin,以前学java编写的部分的知识忘记了,现在重新学一下,总结了一下,与君共勉。...public static代表的是静态的方法,可以不通过创建所属对象进行访问;直接public代表是非静态方法,需要先new一个对象进行访问。...1.若是一个成员被声明为static,他就能够在他的类的任何对象创建之前被访问,而不必引用任何的对象。你可以将方法和变量都声明为static。...image.png image.png 2.静态的方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。即使在同一个类之中也不行。...image.png image.png 一般来说,我们使用时通常将public和static一起连用,但是也可以独自的使用static,若是声明为private static就不能别外界调用。
Java当中static和非static变量的区别 static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在。...static修饰的变量在加载的时候先于main方法加载在内存中的数据共享区-------方法区,而非static的变量在加载的时候,是要创建变量才加载在堆内存中的。...static方法和非static方法的区别 static修饰的方法也和static一样。先于main方法被加载到方法区,以便共享使用。...静态的static方法中不能使用this或者super关键字,因为static方法是先于对象创建之前就已经加载的方法,是属于类的方法,而this和super指向的是本类的对象或者父类的对象,非静态的方法是属于对象的...,方法里可以用this和super。
在这个测试程序里,我试图在初始化变量c的值之后再修改c的值,编译直接报错,告诉我c已经是一个只读变量了,不可以改值。...2.static在函数内的时候,表明这个变量在函数的生命周期结束之后也不会被释放。 ?...static使用测试 在第一次调用test()时,如果static int b没有被我赋初值,也会被默认赋值成0。然后执行自增运算,所以输出1。...第二次调用test()时如果是普通的变量,则会被重新分配内存,但static类型的变量上次执行test函数之后没有被释放,而是保存在全局变量区,所以继续加一变成2。...对比一下非static的变量会怎样: ? 3.static在函数外的时候,表明这个变量的作用域只在该.c文件里,不能作用于整个工程。
本文实例讲述了php面向对象程序设计中self与static的区别。分享给大家供大家参考,具体如下: 1、假设我们有个Car类,它有2个方法:model()和getModel()。...3、关键字self的工作原理是:它会调用当前类的方法。 因为model()方法只在Car类中定义的,所以对self来说当前类就是Car类。...self::getModel()就是调用Car类中的getModel方法。 这似乎不是我们想要的,如何解决呢?...5、解决方案二:把self关键字换成static class Car{ public function model(){ //这里我们使用了关键字static static::getModel...(); } protected function getModel(){ echo 'I am car'; } } 我们只是将Car类中的self替换成了static,并未对Mercedes类作修改
再谈PHP中的self与static 之前的文章中有介绍过self、static和parent的传递问题。今天,通过一个小实验,我们来看看self和static操作变量的问题。...通过这个简单的例子,我们可以看出两点: self写在哪个类里面,它固定指向的就是当前的这个类 static就是哪个对象调用它,它指向的就是这个调用者 从代码中我们可以看出,B类没有重写selfName(...)方法,所以B类调用selfName()时调用的是父类A的selfName()方法,self在这个方法中指向的是A类。...static就比较简单了,例子中都是由B类和C类来调用的A类的staticName()方法,根据谁调用就指向谁来看,输出的结果符合我们的预期,B类对象指向的是B类,C类对象指向的是C类。...我们也可以转而理解为self是个常量,写在哪里就不会变了,它就是指明当前这个类。而static是个变量,哪个类用到它了它就被赋值成调用它的这个类。
引言 之前的文章我们已经讲过,在 PHP 类的创建过程中,使用 self 作为类本身的引用,使用 $this 作为类对象的引用。 ? 而在 self 和 static 的使用上,有这细微的差别。...特别是类继承过程中,self 可能带来意想不到的反应,也正如那篇文章所说,建议使用 static 作为类本身的引用。 本文再来探讨,类内的 new self 与 new static 有什么区别。...学习时间 self 总是指向 new 关键字所声明的类;static 在静态绑定中,可以指向层级结构中的任意类。 下面举一个例子。 ? 类B继承了类A的方法。...对于 get_self 方法,返回的是类A本身。而static则返回的是调用者的类,也就是说,谁调用,static就指向谁。self 则持续地指向声明的类。...写在最后 在程序架构时这些基类的设计很关键,需要详细规划和细分业务关系,self static $this 这些高频关键字,需要我们熟练掌握。 Happy coding :_)
那么问题来了,你写了这么多的 PHP 代码,搞得清楚 self 和 $this 的区别吗?本文就来简要说一说。 学习时间 简单地说, $this 指向当前的对象实例,self 指向当前类。...上面这个例子很明确地使用了静态属性,和动态属性,在构造函数内调用。实例化时执行。 如果反过来用就出错了,比如使用: self::$non_static_member . ' ' ....$this->static_member; self 调用了非静态属性,而 $this 调用了静态属性,这是错误的用法。...引申:尽量别用 self::,要用 static:: self 简单好用,但是作用域叫人恼火。因为它的作用域是在定义时的,而不是执行时的。比如这么个例子: ?...使用 static 替换 self。 还是那个规则:$this 引用的是当前的类的实例,static 引用的是当前的类本身。 我们从优秀的代码中学习用法。
python 中的self和cls 一句话描述:self是类(Class)实例化对象,cls就是类(或子类)本身,取决于调用的是那个类。...classmethod的用法 相同: @staticmethod和@classmethod都可以直接类名.方法名()来调用 区别: 从它们的使用上来看,@staticmethod不需要表示自身对象的self...B, hello', name, cls.a) 重点应关注@staticmethod和@classmethod调用本类或其他类的函数和属性的区别 例子1: 关键看第二句 subclass B, hello...和cls的区别 1、self表示一个具体的实例本身。...总结 到此这篇关于深入浅析python 中的self和cls的区别的文章就介绍到这了,更多相关python 中的self和cls内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持
一、 1、static变量 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的...从这里就可以知道final和static变量的区别了 2、静态方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法...(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。...使用final方法的原因有二: 第一、把方法锁定,防止任何继承类修改它的意义和实现。 第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。...特别要注意一个问题: 对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象
1.两者特点 两者都是C语言中的关键字,static是静态的意思,可以用来修饰局部变量,修饰全局变量,修饰函数,extern是用来声明外部符号的。...2.作用域和生命周期 2.1作用域: 作用域是程序设计理念,通常来说,一段程序代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。...0; i<5; i++) { test(); } return 0; } 3.3运行结果 代码1: 代码2: 3.4区别 代码1的test函数中的局部变量...3.5结论 static修饰局部变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是储存在内存的栈区的,但是被static修饰后存储到了静态区。...存储在静态区的变量和全局变量是一样的,生命周期就和程序的生命周期就一样了,只有程序结束变量才能销毁,内存才能回收,但作用域是不变的。
{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能。...这里我主要谈的是this,self,parent 三个关键字之间的区别。从字面上来理解,分别是指这、自己、父亲。...PHP中this,self,parent的区别之二self篇 此篇我们就self的用法进行讲解 首先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量...假如我们使用类里面静态(一般用关键字static)的成员,我们也必须使用self来调用。还要注意使用self来调用静态变量必须使用:: (域运算符号),见实例。 <?...{三}PHP中this,self,parent的区别之三parent篇 此篇我们就parent的用法进行讲解。
领取专属 10元无门槛券
手把手带您无忧上云