您的位置:首页 > 编程语言 > PHP开发

关于PHP静态方法调用和实例化类调用的区别

2016-08-02 12:17 423 查看
1.首先来澄清一些观点

  由于静态方法在内存中只有一份,无论你调用多少次,都是共用的,而且没有对象的概念,所以不能在静态方法里面使用$this调用,如果非得调用的话,只能实例化自身类

  而实例化不一样,每一个实例化是一个对象,在内存中是多个的

<?php
Error_reporting(E_ALL|E_STRICT);

class A{

public function bar(){
echo 'bar'.PHP_EOL;
}
public static function foo(){
echo 'foo'.PHP_EOL;
}
}

A::bar();//会报错
A::foo();//正确
$obj = new A();
$obj -> foo();//正确

/*
  bar()是一个非静态方法,应该由对象来调用,但用静态来调用此方法也可以执行,而严格状态下,此方法会执行,同时报错,
  Strict Standards: Non-static method Human::easyeat() should not be called statically in........
  但是实例化的类是可以调用静态方法的。
*/


<?php

class A{
public $name = 'zongshuai';

public function bar(){
echo 'bar'.PHP_EOL;
}
public static function foo(){
echo self::$name.PHP_EOL;//报错
}
}

A::foo();

/*
静态方法不能调用非静态属性 。不能使用self::调用非静态属性。
*/


总结:
类》访问->静态方法(类的方法)->可以
类》访问->普通方法(对象的方法)->不可以(虽然方法里不用$this关键字时,可以!但不支持这种写法)
对象》访问》静态方法(类的方法)->可以
对象》访问》普通方法(对象的方法)->可以
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: