来源:https://www.cnblogs.com/yolo-bean/p/7739265.html

这里分析了php面向对象中static静态属性和静态方法的调用。关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了。静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。

<?php
header("content-type:text/html;charset=utf-8");
class  Human{ static public $name  = "小妹"; public $height = 180; static public function tell(){ echo self::$name;//静态方法调用静态属性,使用self关键词 //echo $this->height;//错。静态方法不能调用非静态属性
//因为 $this代表实例化对象,而这里是类,不知道 $this 代表哪个对象
 } public function say(){ echo self::$name  . "我说话了"; //普通方法调用静态属性,同样使用self关键词 echo $this->height; }
}
$p1  = new Human();
$p1->say();
$p1->tell();//对象可以访问静态方法
echo  $p1::$name;//对象访问静态属性。不能这么访问$p1->name
//因为静态属性的内存位置不在对象里
Human::say();//错。say()方法有$this时出错;没有$this时能出结果
//但php5.4以上会提示
?>

结论:

1、静态属性的调用,用self:: ,无论是静态或非静态方法都可以调用静态属性;

2、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;

3、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;

在tp5框架里面,只能调用静态的,如果强制用self调用非静态的方法是会报错的。

想要在静态方法里面调用本类的方法的话,只能new出来一个实例,然后调用。静态方法中不能引用非静态方法——理由很简单,因为静态方法直接可以不经过实例化就可以使用。但是非静态方法必须借助一个实例才能使用。静态方法中用非静态变量,那么这变量“没有实例化”就不能被直接使用的。矛盾。

转载于:https://www.cnblogs.com/laijinquan/p/9088839.html

PHP中静态(static)调用非静态方法详解--调用!!!相关推荐

  1. Java中的静态方法为什么不能调用非静态方法

    hello,小伙伴们好,我是江湖人送外号[道格牙]的子牙老师. 昨晚京东大佬勇哥在群里分享了一道他新创的JVM面试题,我听完后觉得还挺有意思的,分享给大家 小佬们先别急着看我的分析,先自己想想答案 你 ...

  2. php类如何变为静态调用,PHP类中静态方法如何调用非静态方法?_后端开发

    php如何将字符串转成json_后端开发 php将字符串转成json的方法是:可以通过json_encode()函数来实现.json_encode()函数用于对变量进行JSON编码,该函数如果执行成功 ...

  3. static(静态方法中)如何调用非静态方法?

    在静态方法的内部不能直接调用非静态方法,因为方法属于类而不是对象,我们可以通过自己手动new对象来在静态方法中调用 简单case: 如下代码设置Build类一个静态方法一个成员方法 public cl ...

  4. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  5. PHP中静态方法(static)与非静态方法的使用及区别

    static关键字用来修饰属性.方法,称这些属性.方法为静态属性.静态方法. static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类 ...

  6. php中静态方法的调用,php中静态方法和非静态方法如何相互调用?

    php中静态方法和非静态方法如何相互调用?2020-09-01 00:05:28 php中静态方法和非静态方法相互调用的方法:1.非静态方法调用静态方法: 可以[self]或者类名加[::]的形式调用 ...

  7. java中怎么调用非静态方法有哪些_java中 静态方法和非静态方法的调用

    静态方法里面不能调用非静态方法 package com.zqz.image; public class HellowWord { public void say(String word){// 非静态 ...

  8. java static method_java static关键字静态方法详解,静态方法实例分享

    之前给大家介绍了一下java static关键字静态变量,那么下面要接着给大家介绍的就是静态方法,主要有成员方法涵盖内容以及静态方法与实例方法的区别以及实例介绍. 和成员变量相似,成员方法也能够分成下 ...

  9. 静态方法不能调用非静态方法的原因

    静态方法是属于类的,即静态方法是随着类的加载而加载的,在加载类时,程序就会为静态方法分配内存,而非静态方法是属于对象的,对象是在类加载之后创建的,也就是说静态方法先于对象存在,当你创建一个对象时,程序 ...

  10. Java静态方法调用非静态方法

    静态方法(static mehod)不能直接调用非静态方法(non-static method),可以通过一个对象的引用传入静态方法中,再去调用该对象的非静态方法.在主函数(static方法)中,经常 ...

最新文章

  1. 收藏:TerryLee的.NET设计模式系列文章
  2. Php7实现文件下载,PHP7 SFTP下载文件并重命名该下载文件
  3. Ocelot 集成Butterfly 实现分布式跟踪
  4. 四级计算机网络选择题,2015全国计算机等级考试四级计算机网络模拟选择题
  5. Bw树:新硬件平台的B树(内存数据库中的b树索引)
  6. win10下装黑苹果双系统_win10远程双系统重装电脑维修7黑苹果笔记本安装做虚拟机服务mac8...
  7. 【springboot+easypoi】一行代码搞定excel导入导出
  8. python简单实用案例_Ajax的简单实用实例代码
  9. config.class.php,Config.class.php
  10. python wechatpay微信支付回调_【微信支付】JSAPI支付开发者文档
  11. spark学习-JavaRDD注册成表然后用SparkSQL查询
  12. SVN的搭建(入门篇)
  13. 解决wordpress后台管理访问速度慢的问题
  14. MIT 6.828 main.c文件分析
  15. 大数据分析的作用与注意事项
  16. Sql Server系列:数据类型转换函数
  17. 【UVM芯片漫游指南_000】总目录(下)——UVM目录
  18. 第3节:alphapose环境配置
  19. 小功率太阳能UPS锂电池传感器供电系统套件充电宝不间断电源 5V12V户外监控
  20. 2017百度AI开发者大会召开,智能云计算分论坛聚焦ABC

热门文章

  1. SqlServer批量插入测试数据
  2. 22. 切勿直接修改set或multiset中的键
  3. C++ 函数需要有返回值,但非全分支return(RVO)
  4. 每天一道剑指offer-二叉树中和为某一值的路径
  5. php简单富文本,JS简易版富文本编辑器实现代码
  6. 五万字整理Mybatis 入门只需要一篇文章
  7. 编程简单的计算机,计算机简单编程示例
  8. 合沟微服务怎么添加_如何在微服务中使用webservice?
  9. java 字符流异常处理_IO字符流9jdk7和jdk9中流的异常的处理
  10. swiftui动画之tab自定义切换动画_骨骼动画制作|万彩骨骼大师