【问题标题】:Call function of class ONE from class TWO without extend?从类 2 调用类 ONE 的函数而不扩展?
【发布时间】:2011-08-17 23:31:51
【问题描述】:

如果我有两个类 A、B,一个不扩展另一个类,它们是分开的,但都加载到脚本中,我还能从 B 引用 A 中的函数吗?

class A {
    function one() {
        echo "Class A";
    }
}

class B {
    function two() {
        echo "Class B";
        A::one();
    }
}


$a new A; 
$b = new B;

$b->two();

【问题讨论】:

标签: php class reference


【解决方案1】:

从表面上看,是的,你可以做到这一点。但是,A 类中的函数 one() 需要声明为 static 才能使您的调用符号起作用。 (这使它成为一个类方法。)

代码最后几行建议的另一种选择是实例$b 调用实例$a 中的函数。此类函数称为实例方法,是您通常与对象交互的方式。要访问这些方法,必须将它们声明为public。声明为private 的方法只能由该类中的其他方法调用。

有几种方法可以在您的代码中调用实例方法。这两个很明显,您可以将 $a 作为参数传递给函数,或者您可以在方法中创建类 A 的实例。

你真正想要达到什么目的?

【讨论】:

    【解决方案2】:

    你可以这样定义。

    class A {
        public static function one() {
            echo "Class A";
        }
    }
    
    class B {
        function two() {
            echo "Class B";
            A::one();
        }
    }
    
    
    $a new A; 
    $b = new B;
    
    $b->two();
    

    【讨论】:

    • 这对我有用,但现在这个函数里面有 $this 并且由于静态它不再工作,有没有办法在没有 $this 的情况下在同一个类中调用变量?
    • 其实它的意思是“在非对象中调用成员函数 one()”
    【解决方案3】:

    您可以将一个定义为静态,但为什么要这样做呢?

    【讨论】:

    • 我需要把它放在每个 20 个文件中,所以我宁愿只放 "$b->two();"比整个 5 行长的东西。
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多