PHP 父类静态方法中调用子类静态方法

get_called_class() 获取调用该方法的类,如果是在子类中调用父类方法,则返回子类的类名。

或者用static关键字: static::class

如果有多个子类,要在父类中调用子类方法,下面代码可实现:

class parent{
    abstract protected static function getFunc($action);
   public static function call($action){
     //调用子类静态方法,唯一的方式
        $func = static::getFunc($action);
            if(!$func){
            exit();
        }
        try {
            $reflectionMethod = new ReflectionMethod(get_called_class(), $func);
        }catch (ReflectionException $e) {
            exit();
        }
        return $reflectionMethod->invoke(null/*,$paras*/);
    }
}

class son extends parent{
    public static function getFunc($action){
         return "hello";
    }
}
时间: 2024-10-09 16:58:46

PHP 父类静态方法中调用子类静态方法的相关文章

静态方法中调用非静态方法

静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法.但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法. 在主函数(static方法)中我们经常创建某个类的实例,再利用其引用变量调用它的非静态方法. //StaticMethodTest.java//A ststic method cannot call a non-static method, but we can transfer a obje

转:静态方法中调用非静态方法

我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法.但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-static方法. 其实这个事实的应用很经常,以至于我们不去重视:在主函数(static方法)中我们经常创建某个类的实例,再利用其饮用变量调用它的非静态方法. //StaticMethodTest.java//A ststic method cannot call a non-static metho

关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service

如何在静态方法中调用注入的service Public class ClassA{ public static ClassA classA; @Resource private Service service; //原理时在工程启动时加载,在静态方法前加载,这样就可以在静态方法中调用注入的方法啦 @PostConstruct public void init() { classA = this; classA.service=service; }} 关于jpa的Specification自定义函

java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?

多态 package com.swift.jiekou; public class Jicheng_Tuotai_jingtai_diaoyong { public static void main(String[] args) { Fu f=new Zi(); f.show(); } } class Fu{ static int x=1; public static void show() { System.out.println("父类的方法"+x); } } class Zi e

El中调用java静态方法

最近在项目中遇到需要调用静态方法的问题,形如: <c:forEach items="beans" var="bean"> <p>总数:${com.example.Tools.getTotal(bean.nums)}</p> </c:forEach> 不过上面的代码不能通过编译,只能寻求其他办法.经过查阅各种文档,找到了3种解决办法. 1,直接为Bean创建一个get方法 public double getTotal()

静态方法中调用实例方法的自产自销

public class SomeClass {     private string myfield = null;     public static SomeClass instance = new SomeClass();     public instranceMethod() {};     public static staticMethod() {}; }   public class AnotherClass {     public static Main()     {  

java中静态方法中为什么不能使用this、super和直接调用非静态方法

这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆内存中创建对象.所以说静态方法会随着类的加载而被加载.当你new一个对象时,该对象存在于对内存中,this关键字一般指该对象,但是如果没有new对象,而是通过类名调用该类的静态方法也可以. 程序最终都是在内存中执行,变量只有在内存中占有一席之地时才会被访问,类的静态成员(静态变量和静态方法)属于类本

java继承-子类调用父类的方法中包含子类重写的方法

# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了... # 先看代码: public class Common { public static void main(String[] args) { Sub sub = new Sub(); sub.testSub(); } } class Parent { protected boolean test() { throw new RuntimeException(); } protected void testParent() { if

php父类中访问子类的静态属性

在类中,我们可以通过self访问本类或父类中的静态属性/静态方法,可以通过parent访问父类中的静态属性/静态方法. 可我们却没有关键字从父类中的方法访问子类的静态属性,这是由于父类是先于子类创建的,所以从逻辑上来讲从父类中访问子类的静态属性并不是一个好的选择. 但有些时候我们不得不这样做,那么我们可以通过get_class()方法实现: get_class()返回的是本对象名, get_class(obj)返回的是对象obj的名, 看下面这个例子: <?php class A {    fu