使用parent ::时静态属性的问题

时间:2012-05-24 15:49:40

标签: php oop

当我运行此代码时:

<?php
require_once 'getdata.class.php';
class Header extends GetData
{ 
    public $headers;

    public function sayfaHeader($sayfa = 1) 
    { 
        return parent::$sql = "SELECT * FROM header WHERE id='" . $sayfa . "'"; 
        //$data = parent::getData();
        return $data;
        $this->headers = (object) $data;
        return (object) $this->headers;
    } 
} 
$header = new Header;
echo $header->sayfaHeader();

?>

我收到此错误代码:

Fatal error:  Access to undeclared static property: GetData::$sql in C:\AppServ\www\ilk\class\header.class.php on line 9

为什么我不能使用parent :: word? 我只想更改 public $ sql

的变量值

3 个答案:

答案 0 :(得分:2)

我们至少应该看到GetData父类。我敢打赌$ sql不是该类中的静态属性。在这种情况下,如果静态有意义,则将其声明为static,否则替换:

parent::$sql = "SELECT * FROM header WHERE id='" . $sayfa . "'";

使用:

$this->sql = "SELECT * FROM header WHERE id='" . $sayfa . "'";

任何对象始终可以访问父类中声明为publicprotected的属性。在这种情况下,您不需要parent::

BTW 我不明白为什么你有这些return陈述......

答案 1 :(得分:1)

要改变公共价值,您可以这样做:

 public function sayfaHeader($sayfa = 1) 
 { 
    return $this->sql = "SELECT * FROM header WHERE id='" . $sayfa . "'";
 }

将调用父属性并指定值。

答案 2 :(得分:1)

首先,您要发出一个回复,然后在其下面有代码。一旦你发出一个回复,就不会执行下面的代码,所以希望你不要依赖return parent::$sql...下面的任何东西来执行,因为它不会被执行。

其次,在单个函数中有三个返回语句,这些语句属于同一个逻辑块。在函数中使用多个return语句没有任何问题,但它们必须是互斥的,如下面的代码所示:

if( condition ) return $something;
else return $somethingElse

在PHP中,您只能从函数返回单个值。该值可以是一个数组,如果您愿意,可以存储多个值。此外,您可以return values by referencepass parameters as references,但除非您有充分理由这样做,否则通常不是一个好主意。

我会保留回答您的实际问题,直到我看到GetData的样子。