如何在php中调用父类方法

时间:2012-10-18 07:01:14

标签: php oop inheritance scope-resolution

这是工作代码,但我想知道不使用其他对象(评论$foo)我如何使用printItem() class Foo $bar方法使用printItem()对象。 oop编程概念的新手可能是一个很弱的问题,但实际上无法找到:(

我使用范围解析运算符来使用Foo class的{​​{1}},现在我的查询是当我们可以使用此功能时,创建对象的用途是什么?何时在适当的编码环境中使用范围分辨率运算符。

<?php

class Foo
{
    public function printItem($string)
    {
        echo "This is in class Foo ". $string ."<br />";
    }

    public function printPHP()
    {
        echo "PHP is great "."<br />";
    }
}

class Bar extends Foo
{
    public function printItem($string)
    {
        echo "This is in class Bar ". $string ."<br />";
    }
}       

//$foo = new Foo;
$bar = new Bar;

$bar->printPHP();
$bar->printItem("Bar class object");
//Foo::printItem("Mental Case");

3 个答案:

答案 0 :(得分:16)

printItem定义为静态方法,您可以使用Foo::printItem("Mental Case"); 或者用子方法调用它:

public function printItem($string)
{
    parent::printItem($string);
    echo "This is in class Bar ". $string ."<br />";
}

答案 1 :(得分:2)

<?php
class test {

    public function __construct() {}

    public function name() {
       // $this->xname('John');
          $this->showName('John');
    }

    private function showName($name) {
        echo 'my name in test is '.$name;
    }
}

class extendTest extends test {

    public function __construct() {
        parent::__construct();
    }

    private function showName($name) {
        echo 'my name in extendTest is '.$name;
    }
}

$test = new extendTest();
$test->name();
?>

结果:我在测试中的名字是John

如果我们将showName方法的可见性更改为public或protected,则上述结果将为: 我在extendTest中的名字是John

答案 2 :(得分:0)

通过添加“static”关键字使printItem成为静态方法。 printItem($ string)可以在不创建此类对象的情况下使用。

<?php

class Foo
{
    static public function printItem($string)
    {
        echo "This is in class Foo ". $string ."<br />";
    }

    public function printPHP()
    {
        echo "PHP is great "."<br />";
    }
}

class Bar extends Foo
{
    public function printItem($string)
    {
        echo "This is in class Bar ". $string ."<br />";
    }
}       

//$foo = new Foo;
$bar = new Bar;

$bar->printPHP();
$bar->printItem("Bar class object");
//Foo::printItem("Mental Case");