<?php
    class A{
public function pp(){
    return 1300;
        }
public function __construct(){
    echo 1;
}
    }
    class B{
        public function __construct(){
    //echo A::__construct();
    //echo A::pp();
}
    }
    $cc=new C;
?>问个问题:
pp是class A的公有方法,所以可以用类名+双冒号的形式访问。那问题就在于,为什么class A里头的__construct方法,我也是给了public,而在class B里头,去A::__construct()调用的时候会报以下错误:Fatal error: Non-static method A::__construct() cannot be called statically, assuming $this from incompatible context in D:\wamp\www\1.php on line 12还有个问题,比如:
class A{
    public $m=10;
}
这个$m既然是public,那就应该支持类内部访问,子类访问以及实例访问。
我在有些书上看到,它们说“在任何地方”都可以访问。我想问这个任何地方是否包括其他不相关的类(和A没继承关系的类),如果支持访问,怎么访问?代码如何写的?

解决方案 »

  1.   

    1. 你的描述有问题, ::操作符只允许调用静态方法或者父类的方法。
    而A::pp也会产生错误,只是你没有将这种错误纳入报错范围
    2. 任何地方 指的就是任何代码块都可以。
    $a = new A(); 
    echo $a->m;
    // 10面向对象对新手来说不好学,你现在需要的是仔细看一遍官方手册上关于面向对象的知识。先大概了解一番
    http://www.php.net/manual/zh/language.oop5.phphttp://www.php.net/manual/zh/language.oop5.php
      

  2.   

    1,配置的问题,详见手册上对php.ini error_reporting的解释
    http://php.net/manual/zh/errorfunc.configuration.php#ini.error-reporting
    2,我上面写的就是其它类访问的方式,当然静态属性有另外的访问方法。
      

  3.   

    比如说这个,class B如何去访问class A里的$mm?<?php
    class A{
        public $mm=10;
    }
    class B{
        public function __construct(){
    echo $aa->mm;
        }
    }
    $aa=new A;
    $bb=new B;
    ?>
      

  4.   

    静态方法或者实例化你上面的代码实例化了 例如这样访问
    class A{
        public $mm=10;
    }
    class B{
        protected $classA;
        public function __construct($number){
            $this->classA=$number;
            echo $this->classA;
        }
    }
    $aa=new A;
    $bb=new B($aa->mm);
      

  5.   

    那问题就在于,为什么class A里头的__construct方法,我也是给了public,而在class B里头,去A::__construct()调用的时候会报以下错误:
    classs A{
    public function __construct(){}
    }
    class B{
    public function __construct(){}
    }我想请问的A,B是什么关系呢?