PHP在包含文件上访问父类

时间:2011-06-17 11:08:06

标签: php class include

问题的最新更新

我不是类'BlogPost'来访问已在main.php页面上设置的父类变量

class BlogPage {
    public $PageExists = false;
    public $PageTitle = "no title";
    public $PageId = "0";
    function __construct($page){
        //some sql to check if page exists
        if($page_exists){
            $this->PageExists = true;
            $this->PageTitle = $fetched['row_title'];
            $this->PageId = $fetched['row_id'];

        }
    }
}

class BlogPost extends BlogPage {
    function __construct(){
        $page_id = $this->PageId;
        //some sql to get the posts that have post_page like $page_id
    }
}

Main.php页面

$page = new BlogPage("index");
if($page->PageExists == true){
    include("posts.php");
}else{
include("notfound.php");
}

posts.php

$pageTitle = $page->PageTitle;
$posts = new BlogPost();

>

3 个答案:

答案 0 :(得分:0)

我觉得你在classOne protected

中有你的变量

答案 1 :(得分:0)

如果classTwo从classOne扩展,您将能够:

$two = new classTwo();
$two->functionFromClassOne();

并且可以访问该课程。

您可能有必要解释确切的用例,以便建议采用最佳方法。也许继承并不是实现你想要建立的任何东西的最佳方式。

答案 2 :(得分:0)

如果您想访问父级的protectedpublic个变量和函数,那么您将使用parent::静态前缀。

在您的情况下,如果您想访问classOne中的protectedpublicclassTwo个变量和函数,那么您只需使用parent::classTwo内。

如果您只想在包含的文件中使用classTwo实例化对象,那么您不需要将其声明为global,您只需正常访问它就像访问它一样下面的行在主文件上声明它。

更新1

您不需要将该变量的范围定义为全局,因为它已在该脚本的该部分上具有该范围。所以,只需像这样访问它:

// global $page; remove this, no need for it
$pageTitle = $page->PageTitle;
$posts = new BlogPost();

更新2

这是我对你的第二个问题的建议解决方案:

<?php
class Page{
    public $PageExists  = false;
    public $PageTitle   = 'no title';
    public $PageId      = '0';
    // add other options here

    // add other parameters to this function
    // or pass an array to it
    protected function fill($page_id, $page_title){
        $this->PageExists   =   true;
        $this->PageId       =   $page_id;
        $this->PageTitle    =   $page_title;
    }
}

class BlogPage extends Page{
    function __construct($page){
        //some sql to check if page exists
        if($page_exists){
            parent::fill($fetched['row_id'], $fetched['row_title']);
        }
    }
}

class BlogPost extends Page {
    function __construct($page_id){
        //some sql to get the posts that have post_page like $page_id
        if($post_exists){
            parent::fill($fetched['row_id'], $fetched['row_title']);
        }
    }
}
?>

然后你可以使用类似下面的类......

在Main.php页面上

<?php
$page = new BlogPage("index");
if($page->PageExists == true){
    include("posts.php");
} else{
    include("notfound.php");
}
?>

关于posts.php

<?php
$pageTitle  = $page->PageTitle;
$posts      = new BlogPost($page->PageId);
?>