7

这是工作代码,但我想知道不使用另一个对象(注释$foo)我如何使用使用对象printItem()的方法。oop 编程概念的新手,所以问起来可能很弱,但真的找不到:(class Foo$bar

我使用范围解析运算符来使用printItem()of Foo class,现在我的查询是什么时候可以使用此功能,那么创建对象有什么用?何时在适当的编码环境中使用范围解析运算符。

<?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");
4

3 回答 3

16

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

public function printItem($string)
{
    parent::printItem($string);
    echo "This is in class Bar ". $string ."<br />";
}
于 2012-10-18T07:08:16.627 回答
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();
?>

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

如果我们将 showName 方法的可见性更改为 public 或 protected 那么上面的结果将是:my name in extendTest is John

于 2012-10-18T07:11:04.410 回答
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");
于 2012-10-18T07:12:55.980 回答