既然可以直接用类名调用类中的方法和属性,那还声明对象干嘛? 这不是多此一举吗? class One
{
var $a;
var $b; function get()
{
echo 'hello';
}
}

$one = new One();
$one->get();
echo '<br>-----------------<br>';
One::get();//这么一条语句可以代替$one = new One();$one->get();两条。???

解决方案 »

  1.   

    php中的对象跟java有哪些不同啊。怎么感觉越来越乱啊???有好多疑问关于php对象这块儿,总感觉他的语法有很多矛盾的地方啊?
      

  2.   

    当你把类中的定义改成以下试试。 class One {
          var $a='hello'; 
      var $b; 
      
      function get() {
             echo $this->a; 
      } 
    } $one = new One(); 
    $one->get();
     echo '<br>-----------------<br>'; 
    One::get();//这么一条语句可以代替$one = new One();$one->get();两条。???
      

  3.   

    你这么一说我更乱了!!!!怎么回事啊?那么这种(One::get())的方式为何还要存在?又有何意义?
      

  4.   

    还有一个问题:就是在访问类属性(比方说$a吧)可以这样:$this->a; 还可以这样self::$a; 那么->和 :: 这两个符号功能差不多那为毛一个a不加$符号,一个a却要加$符号???????乱!!!!!
      

  5.   

    One::get()当get()方法里面没有涉及类的属性和方法时可以使用。
    至于第二个请看这里:PHP中::、->、self、$this操作符的区别
      

  6.   

    当get方法是静态的 可以替代了
      

  7.   

    你new出来的东西是一个新的对象类型的变量,一个类可以new很多个对象出来,但是每个对象的函数,属性值不共用
    直接用类名字访问的话是静态类,就是说只要类的文件被引入,这块内存空间就存在
    这样举例:class One {
        public $a='hello'; //Public 修饰的变量可以在对象外部被修改    function get() {
            echo $this->a; 
        }
    } $one1 = new One();
    $one2 = new One();
    echo($one1->get());
    echo($one2->get());echo('----------');
    $one1->a = 'world';
    echo($one1->get()); //改变了
    echo($one2->get()); //没变echo('===============');
    //echo(One::get()); //报错 没有new过的类是不能在函数里面调用$this的
    echo(One::$a);
    One::$a = 'world';
    echo(One::$a);
      

  8.   

    跟java哪里两样了。。你用::这样调用的函数或者变量相当于java中static修饰的,php允许省略而已