当前位置:首页 » 密码管理 » 如何访问静态成员php

如何访问静态成员php

发布时间: 2024-09-21 22:14:22

php父类如何调用子类的静态方法或变量

php父类中怎么调用子类的的静态属性了,Oh,my god,如果被面试官问道这种问题,你一定会说shit,fucky question。你会说我很少这么做,况且php对于静态的操作太随意了,php在父类调用子类的静态属性是一件麻烦的事情。我们知道子类中调用父类的静态属性,可以用self::的形式。但是父类调用子类如果用self::就只能调用到父类的静态属性。那么,怎么办了?php是不是无法做到了?答案当然是否定的,php中还可以使用在父类中用子类的类名来调用的方法。
不过,这当中仍然存在一个问题,就是如果我有多个类继承了同一个父类,而且父类的某个函数要用到各个子类的静态属性的话,就想当trouble了。这里有个php的朋友提供了一种思路,采用在子类中重载父类的方法使父类得到静态属性。父类中使用了get_class函数得到类名,get_class()是父类名,get_class($this)是子类名。好了得到这个再用eval函数做下执行语句就OK啦。例子:
//父类class A {
public function __con(){
//这里主要为让大家看清楚,所以打印出来类名,供大家学习
echo(get_class($this)).'/';
echo(get_class()).'/';
eval(\$ab = . get_class($this) . ::\$table;);echo $ab;}}//子类Bclass B extends A {
static $table = 'b table';
function __construct(){
$this-__con();}}//子类Cclass C extends A{
static $table = 'c table';
function cc(){
$this-__con();}}//调用
new B; //输出结果 B A b table
$c = new C;
上面就是php父类调用子类静态成员的方法,在子类重载父类的方法还是相当不错的 ,当时听朋友提起这个时,就异常激动。父类我们也叫做基类,或者底层类。一般都是最先设计,子类就是根据各个需要来设计,所以我们子类修改的可能性比较大,操作灵活性也比较大。

② php中::是什么意思

PHP中的‘::’是一种内置的语法解析符号,中文名叫做“范围解析操作符”。:: 符号是用来帮助PHP中的语法结构“类”来实现对其成员的访问,通常我们只允许访问静态成员,具体代码如下:

① 类正常访问静态成员

class Heima{
//静态属性
public static $heima = '黑马';
//静态方法
public static function getHeima(){
//内部使用::
echo self::$heima; //self代表Heima类,同Heima::$heima
}
}

//外部访问
echo Heima::$heima; //访问静态属性,输出黑马
Heima::getHeima(); //访问静态方法,输出黑马
② 类访问普通方法(系统不建议,有风险,风险原因网页链接)

class Heima{
//普通方法
public function show(){
echo __CLASS__; //输出当前所属类类名
}
}

//正常应该是对象访问 $h = new Heima();$h->show();
//静态访问
Heima::show(); //系统会提示点什么,但是可以访问
//其实对象也可以利用::符号访问
$h = new Heima();
$h::show(); //效果也能达成,但是我们通常不建议这么使用
有关这类的基础知识,到黑马程序员论坛里面去看基础知识的视频吧。还有笔记。不然这么问,耽误自学时间
?

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

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

④ PHP高级程序设计:模式、框架与测试目录

PHP 高级程序设计:模式、框架与测试目录

第一部分:OOP 和模式

深入探讨面向对象编程(OOP)的核心概念及其在 PHP 中的应用。了解抽象类、接口和契约式编程的基本原理和实践。

第1章:抽象类、接口和契约式编程

- 探索抽象类的定义和实现,学习如何通过抽象类提供通用代码和行为的蓝图。
- 了解接口的用途,掌握如何定义和实现接口以确保类遵循特定的行为规范。
- 熟悉 `instanceof` 操作符的用法,用于检查对象是否符合特定类或接口。
- 掌握契约式编程的技巧,确保代码的可预测性和可维护性。

第2章:静态变量、成员和方法

- 理解静态变量的特性,学习如何在类中声明和使用静态变量。
- 掌握静态成员的使用,了解它们与普通成员的区别。
- 介绍双冒号(paamayim nekudotayim)符号,以及它在 PHP 中如何用于访问静态成员。
- 探讨静态方法的定义和调用,理解它们的作用和优势。
- 讨论“静态”特性的争议点,评估静态属性和方法在不同场景下的适用性。

第3章:单例模式和工厂模式

- 分析职责和单例模式的概念,了解如何设计单例类以确保全局资源的唯一实例。
- 学习工厂模式的原理,掌握如何创建和管理对象的实例。
- 通过具体示例(如图像对象工厂和可移植的数据库)展示工厂模式在实际应用中的作用。

随着深入学习这些设计模式和面向对象编程原则,您将能够构建更高效、更易于维护的 PHP 应用程序。理解这些模式的基础知识,将有助于在项目中实现更好的代码组织、解耦和可扩展性。

⑤ 说说php面向对象编程时static,public,private,protected 各有什么意义

staticpublic与publicstatic是等价的,这两者只是两个修饰符的顺序不同。根据oracle.com教材中第八章的描述,如果两个或两个以上的(不同的)字段修饰符出现在字段声明,它们出现的顺序需与FieldModifier一致,这只是习惯,但不是必需的。部分修饰符说明:public是访问权限修饰符,用于控制外界对类内部成员的访问,声明为public的对象成员是完全共有的,外界可以随意访问,除此之外还有private,protected和默认。static控制类成员变化的修饰符。static是静态成员修饰符,其修饰的静态变量脱离具体对象独立存在,在内存中之后一份拷贝,所有的对象都公用这一个存储空间,所以对static修饰的静态变量进行的修改对该类的所有对象都起作用。static修饰的静态函数代表所有对象的统一操作,只能调用静态变量。static是针对面向对象中的“多态”而提出来的,static修饰的静态成员不存在多态性。附:FieldModifier顺序

⑥ 关于 php 类 关键字 public static 连用的问题

static是静态成员的声明关键字,跟public不冲突
static控制成员的存在周期,public控制成员的访问权限

public static声明这个变量为public就是可以公共访问的,且是静态变量
class test{
public static $name="myname";
}
$testOne = new test();
echo test::$name;//输出myname

但是如果将以上是public,改成private,将提示错误

⑦ php中static静态类与static 静态变量用法区别

static 是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了。
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都一样,那静态方法/变量存在还有什么意义呢?
静态 static
声明类成员或方法为 static ,就可以不实例化类而直接访问,不能通过一个对象来访问其中的静态成员(静态方法除外)。静态成员属于类,不属于任何对象实例,但类的对象实例都能共享。

热点内容
喵解压码 发布:2024-09-22 01:23:05 浏览:878
fgo安卓怎么登录 发布:2024-09-22 01:18:41 浏览:910
数据库字符转换 发布:2024-09-22 01:18:06 浏览:603
密码箱旁边的钥匙孔干什么用的 发布:2024-09-22 01:10:48 浏览:887
没有u盘怎么引导安卓iso镜像 发布:2024-09-22 01:09:41 浏览:747
安卓怎么变成10系统 发布:2024-09-22 01:05:29 浏览:153
绘本解压 发布:2024-09-22 01:04:04 浏览:806
为什么电脑我的世界进不了服务器 发布:2024-09-22 01:02:17 浏览:698
为什么缓存不了柯南 发布:2024-09-22 01:01:34 浏览:819
苹果手机怎么修改无线网密码 发布:2024-09-22 01:01:34 浏览:464