当前位置:首页 » 编程语言 » php对象调用静态方法调用

php对象调用静态方法调用

发布时间: 2022-08-05 18:23:04

1. php面向对象 静态属性为什么能用对象访问

Static关键字

声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。

由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。

静态属性不可以由对象通过->操作符来访问。

用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。

就像其它所有的PHP静态变量一样,静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。 所以你可以把静态属性初始化为整型或数组,但不能指向另一个变量或函数返回值,也不能指向一个对象。

--------以上为php手册 原文

2. php中为什么$this不能调用静态变量却能调用静态方法

因为静态变量是所有实例所共用的。$this代表的是实例化后的对象。你可以用self::来调用静态变量。

3. php直接用类名调用静态方法会不会触发类的构造函数

调用类的静态函数时不会自动调用类的构造函数。
测试方法,在各个函数里分别写上下面的代码 echo __LINE__,__FILE__,'<br>';
根据输出的内容,就知道调用顺序了。

4. php 静态方法为什么不能调用this

static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”。
2. 静态变量的调用方法:只能使用slef:: 或者 类名:: 访问,不能使用$this访问;反之,类的成员变量未声明为const及static时,只能使用$this访问,不能用::访问。

5. PHP类的静态(static)方法和静态(static)变量使用介绍

在php中,访问类的方法/变量有两种方法:
1.
创建对象$object
=
new
Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。
2.
直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
A.
如果是变量,需要该变量可访问。
B.
如果是方法,除了该方法可访问外,还需要满足:
b1)
如果是静态方法,没有特殊条件;
b2)
如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。
然后我们再看一下使用$object->…
和使用class::…
都有什么区别:
1.
使用$object->…
,需要执行构造函数创建对象;
2.
使用class::…
调用静态方法/变量,不需要执行构造函数创建对象;
3.
使用class::…
调用非静态方法/变量,也不需要执行构造函数创建对象。
然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?
差异还是显然存在的,如下:
1.
静态变量
静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也就是说,所有的实例共享这个成员。
2.
静态方法
静态方法可以直接使用class::…
来调用,而非静态方法需要满足一定限制条件才能使用class::..
的方法调用,如之前所述

6. php 在什么情况下 ,只能实例化对象调用类方法,不能用静态static方法

类中没有静态方法就必须实例化

<?php
classt1{
functioni(){}
}

classt2{
staticfunctioni{}
}
//

?>

7. PHP面向对象的静态方法具体什么时候用

静态变量,没有什么特定的情况。就像public一样,只不过调用方法不一样。一个是$this->变量名,一个是self::变量名

8. php中怎么调用方法中的静态变量

static
变量是php中的变量作用范围的一个重要特性
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果
一个普通的变量,如
$message
在它所在的函数执行完之后就被释放了
即第二个function执行10次,每次执行完后,$message变量被释放,所以每次都是1
变量前加了static后,该变量在它所在的函数执行完后不会被释放
即第一个function每次被执行后,static
$message没有被释放,它将被继续累加

9. php直接用类名调用静态方法会不会触发类的构造函数

调用静态方法与触发类的构造函数没有必然关系。但是静态方法可以实例化类本身,这时候会触发构造函数,而且可以传参数。如:
classclassname{
privatefunction__construct($a){
$this->a=$a;
exit($this->a);//打印一下
}

publicstaticfunctionstaticfun($a){
newself($a);
}
}

//usecaseasfollow:
$a='测试123';
classname::staticfun($a);

热点内容
剪力墙压脚筋大小怎么配置 发布:2025-01-23 00:50:53 浏览:534
腾讯云cos云服务器 发布:2025-01-23 00:46:47 浏览:63
如何给安卓平板刷上MIUI系统 发布:2025-01-23 00:45:51 浏览:73
2开方算法 发布:2025-01-23 00:27:21 浏览:16
如何看自己steam服务器 发布:2025-01-23 00:07:21 浏览:710
armlinux命令 发布:2025-01-23 00:01:08 浏览:137
战地4亚洲服务器为什么被攻击 发布:2025-01-22 23:45:42 浏览:671
javascript反编译 发布:2025-01-22 23:37:57 浏览:432
夏天来了你的巴氏奶存储对吗 发布:2025-01-22 23:37:56 浏览:206
求最大值c语言 发布:2025-01-22 23:22:35 浏览:250