当前位置:Gxlcms > PHP教程 > 关于静态方法和属性

关于静态方法和属性

时间:2021-07-01 10:21:17 帮助过:19人阅读

目录Table Of Contents

  • 为什么要使用静态方法和属性?

静态方法和属性

静态方法和属性,其实就是通过类而不是通过对象来访问数据和功能。

面向对象编程中的实际操作都是通过类的实例(而不是类本身)完成的,毕竟类只是实例的模板。但是我们可以通过static来访问类的方法和属性,这相当于就是静态的,没有动态的实例化类,而是静态的直接调用。

静态方法是以类为作用域的函数,静态方法不能访问这个类中的普通属性,因为这些属性是属于一个对象的,但可以访问静态属性。

因为通过类而不是实例来访问静态元素,所以访问静态元素时不需要引用对象的变量,而是使用双冒号 ::来访问。

StaticExample::sayHello();

一个子类可以用parent关键字来访问父类,而不使用其类名。要从类(不是子类)中访问静态方法和属性,可以使用self关键字,self指向当前类,就像$this指向当前对象一样。

为什么要使用静态方法和属性?

1.因为他们在代码中任务地方都可用,也就是说,你不需要再对象间传递类的实例,也不需要讲实例存放在全局变量中,就可以访问类的方法和属性。

2.类的每个实例都可以访问类中定义的静态属性,所以你可以利用静态属性来设置值,该值可以被雷的所有对象使用。

3.不需要实例对象就能访问静态属性和方法,这样我们就可以不用为了获取一个简单的功能而实例化对象。

< ?phpclass ShopProduct{    private $id = 0;    public function setID($id){        $this->id = $id;    }    public static function getInstance($id, PDO $pdo){  //关键在这里,getinstance方法是一个静态方法,并且传入的是2个参数,一个是id一个是pdo的实例        $stmt = $pdo->prepare("select * from products where id=?");        $result = $stmt->execute(arrary($id));        $product = new BookProduct($result['title']);  //这里特地设置了一个特定类型的shopproduct对象,这是一个book的shopproduct对象        $product->setID($result['id']);        return $product; //这个方法没有使用任何实例的属性和方法,只要有一个有效的pdo对象,我们就可以在程序任何地方调用它,并且他返回的是一个特定类型的Shopproduct对象    }}$dsn = "sqlite://XXXXXX/products.db";$pdo = new PDO($dsn,null,null);$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMOTE_EXCEPTION);$obj = ShopProduct::getInstance(1, $pdo); //在这里,我们就直接调用了,而没有实例化对象。并且,pdo对象也是可以随时更换的,不用约束在某个pdo对象上。?>

这样的方法就像工厂一样,可以接受原始数据,然后根据这些数据产生对象。

人气教程排行