代码片段
父类:
class DBSQL{
  private $CONN=""; //定义数据库变量
  public function __construct(){
try{
$conn = mysql_connect(ServerName,UserName,PassWord);
}catch(Exception $e){
  $msg = $e;
  include(ERRFILE);
}
子类:
require_once('db_inc.php');
class Vote extends DBSQL{
public $_name = 'vote_info';
public $_item = 'item_info';
public $_user = 'vote_user';
public $_pagesize = 10;
public $_type = array("1"=>"单选","2"=>"多选");
public $_display = array("0"=>"禁用","1"=>"启用"); private function __construct(){
  parent::__construct();
 }报错:
Fatal error: Access level to Vote::__construct() must be public (as in class DBSQL) in C:\APMServ5.2.6\www\htdocs\php\vote\vote.inc.php on line 8问题描述:
为什么我父类用public,子类调用父类构造函数用private不行呢?

解决方案 »

  1.   

    Vote::__construct() must be public 必需是publicqueryphp框架教程三 做SEO优化 以.html结尾去除index.php
    http://topic.csdn.net/u/20100310/11/62a60067-b3da-4dee-9d6a-f1baeb2f3f33.html
      

  2.   

    OO的一个原则:
    While overriding decreasing access specifier is not allowed原因是一个Vote对象也可以看作一个DBSQL对象,
    ...这样说不清楚
    这样说吧 class 鸟{
      public function 飞(){
      }
    }
    class 鹰 extends 鸟{
      public function 飞(){
      }
    }这个就是说鹰是鸟的一种,那么鸟会飞,鹰也应该会飞
    如果鹰::飞设为private,那么不能从外部操作,
    这样对用户来讲,就变成鹰不会飞了.....
      

  3.   

    子类和父类的类型不同, 都要public
      

  4.   

    TO: 2楼
    飞设为private,那么不能从外部操作
    但他是将自己的构造方法私有 那这样如果new了这一个类的对象 照理说不是应该这个对象也能访问这个访问才对
    $小鹰 = new 鹰();
    鹰将构造方法私有为鹰,小鹰也是鹰的一种 它不是应该能访问才对