class login
{

private $mysql;
private $admin;
public function __construct()
{
$this->mysql = 123;
//$this->mysql=require_once(SERVER_ROOT.'/library/mysql.class.php');
//$this->admin=require_once(SERVER_ROOT.'/library/admin.class.php');
}
function __get($name){

   echo $this->$name;
}
}
class admin
{ public function __construct()
{
       
   
}
function myname(){
  $a = new login; 
  echo $a->mysql;

}
}$c = new admin;
echo $c->myname();

解决方案 »

  1.   

    因为$mysql是private属性, 只能在类的内部使用,因此在其他类中是不能引用的
      

  2.   

    1楼的方法是属性访问器 ,你可以采用当存取一个类的不存在的属性时,解析器会判断是否有以下两个属性访问器方法:
    __get和__set。
    如果有,则会自动调用这些方法。通过属性访问器方法可以控制对类属性的访问,以实现对要保存的数据进行检查,从而确保属性值有意义的数据。__get方法只有一个参数,用于传递属性的名称。__set方法有两个参数,分别用于传递属性的名称和值。
      

  3.   

    要引用就改成public... 不然就像一楼那样做
      

  4.   

    只需要获得一个也可以这样:
    public function getMysql() {
        return $this->mysql;
    }
    这样可以防止写入,但麻烦,所以还是推荐改成public
      

  5.   

    因为mysql是私有属性,如果要读取需要提供公用调用方法。
    以下是代码:<?php
    class login
    {
         
        private $mysql;
        private $admin;
        public function __construct($params)
        {
             
            $this->mysql=require_once(SERVER_ROOT.'/library/mysql.class.php');   
            $this->admin=require_once(SERVER_ROOT.'/library/admin.class.php');
        }    public function getMysql(){
         return $this->mysql;
        }
    }class admin
    {   
     
        public function __construct($params)
        {
         $oLogin = new login();
         echo $oLogin->getMysql();
        }
    }
    ?>
      

  6.   

    private只能在类的内部调用,public可以在外部调用该属性,可以看看手册。