在另一个类中的类

时间:2012-11-13 10:53:34

标签: php class

我是PHP OOP的新手,想尝试在另一个类中嵌套几个类,后者就这样调用它们:

$sql = new SQL();
$sql->Head()->Description($_SESSION['page']);
  //OR
$sql->Head()->Keywords($_SESSION['page'])
  //OR
$sql->Body()->Clients($_SESSION['client'])
  //ETC
$query = $sql->Run(); // equivalent to mysql_query("...");

正如你猜测的那样,我遇到了一些问题并以这个糟糕的代码结束了:

<?php
require( $_SERVER['DOCUMENT_ROOT'] . '/#some_db_directory/database.php');
//This file contains $db['host'], $db['user'], etc...

class SQL {
    public $sql;

    public function __construct() {
        global $db;
    }

    public class Head() {

        public function Description($page) {
            return "SELECT * FROM `$db['database']`.`desciption` WHERE `page` = '$page'";
        }

        public function Keywords($page) {
            return "SELECT * FROM `$db['database']`.`keywords` WHERE `page` = '$page'";
        }
    }
}

$sql = new SQL();
echo $sql->Head()->Description('home'); //For testing
  • 是否可以在PHP中嵌套类?
  • 如果是这样,怎么办?

2 个答案:

答案 0 :(得分:1)

您要做的是Encapsulation。尝试使用PHP encapsulation上的Google搜索了解详情。

以下是http://www.weberdev.com/get_example.php3?ExampleID=4060

的代码示例
<?php 

class App { 

     private static $_user; 

     public function User( ) { 
          if( $this->_user == null ) { 
               $this->_user = new User(); 
          } 
          return $this->_user; 
     } 

} 

class User { 

     private $_name; 

     public function __construct() { 
          $this->_name = "Joseph Crawford Jr."; 
     } 

     public function GetName() { 
          return $this->_name; 
     } 
} 

$app = new App(); 

echo $app->User()->GetName(); 
?>

答案 1 :(得分:0)

尝试这样

<?php
require( $_SERVER['DOCUMENT_ROOT'] . '/#some_db_directory/database.php');
//This file contains $db['host'], $db['user'], etc...

class SQL {
    public $sql;
    private $_head;

    public function __construct() {
        global $db;
        $_head = new HeadClass();
    }

    public function Head() {
        return $this->_head;
    }
}

class HeadClass { // Class cannot have a public access modifier

    public function Description($page) {
        return "SELECT * FROM `" . $db['database'] . "`.`desciption` WHERE page = $page";
    }

    public function Keywords($page) {
        return "SELECT * FROM `" . $db['database'] . "`.`keywords` WHERE page = $page";
    }
}

$sql = new SQL();
echo $sql->Head()->Description('home.html');
?>

我正在课堂外移动类声明,并在SQL中创建类的实例。然后通过Head()函数将其提供。

注意:对于body,你需要创建一个单独的类,并在SQL类中使用一个引用,就像我为head做的那样。

相关问题