php怎么使用静态方法

php中,通过static关键字修饰的成员方法被称为静态方法,调用静态方法可以使用“类名::静态方法()”语法,也可以直接实例化一个变量,然后使用“变量名->函数名”的方法调用。

php怎么使用静态方法

本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑

在 PHP 中,通过 static 关键字修饰的成员属性和成员方法被称为静态属性和静态方法,这里可以将它们统称为静态成员,类中的静态成员与类中的一般成员不同,静态成员不会被实例化到对象中,也就是说我们不需要实例化一个类,就可以通过类来访问静态成员。

在类中声明静态变量很容易,我们可以在类的普通成员前加一个 static 关键字,就可以将这个普通成员变成静态成员了。这样一来,我们可以在不实例化类的情况下,直接访问类中的这些静态成员。访问静态成员的语法格式如下:

类名::$静态属性类名::静态方法()

登录后复制

其中::符号被称为范围解析操作符,用于访问静态成员、静态方法和常量,还可以用于覆盖类中的成员和方法。

立即学习“PHP免费学习笔记(深入)”;

或者直接实例化一个变量,然后使用“变量名->函数名”的方法调用。

由于静态方法不需要类的实例化就能够被调用,而普通方法和普通属性都必须先声明一个对象才可以访问,因此,在静态方法里面始终是不能使用普通方法和访问普通变量的。

关于静态方法要牢牢记住一点:“静态方法是属于整个类的。”

class Star{public static function getName($name){return '队员姓名'.$name;}}echo Star::getName('kate');  //队员姓名kate$star = new Star();echo $star->getName('jim');  //队员姓名jim

登录后复制

静态方法的优点:

(1)在代码的任何地方都可以用(假设可以访问该类);

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

(3)不需要实例对象就能访问静态属性或方法。

title = $title;      // 使用伪变量$this给每个变量赋值        $this->producerMainName = $mainName;        $this->producerFirstName = $firstName;        $this->price = $price;    }    /**     * @return mixed 这种只返回属性值的方法称为“访问方法”,也称为 getter 和 setter     */    public function getProducerFirstName()    {        return $this->producerFirstName;    }    /**     * @return mixed 获取 姓 的访问方法     */    public function getProducerMainName()    {        return $this->producerMainName;    }    /**     * @param $num 打折的价格     */    public function setDiscount($num)    {        $this->discount = $num;    }    /**     * @return int 折扣的访问方法     */    public function getDiscount()    {        return $this->discount;    }    /**     * @return mixed Book名或CD名的访问方法     */    public function getTitle()    {        return $this->title;    }    /**     * @return mixed 折扣后的价格     */    public function getPrice()    {        return ($this->price - $this->discount);    }    /**     * @return string 作者     */    public function getProducer(){  // 方法让对象执行任务        return $this->producerMainName .' '. $this->producerFirstName;    }    /**     * @return string 发票的摘要信息     */    public function getSummaryLine()    {        $base = "{$this->title} ( {$this->producerMainName},{$this->producerFirstName}) ";        return $base;    }    /**     * @param $id id 的访问方法, setter     */    public function setId($id)    {        $this->id = $id;    }    // 根据查询数据的数据类型,返回特定类型的 ShopProduct 对象,这个方法没有使用任何实例的属性和方法,因此把它定义为一个静态方法(static),只要有一个有效的 PDO 对象,就可以在程序的任何地方调用这个方法。这个方法就像工厂一样,可以接受原始数据产生特定类型的对象。    public static function getInstance($id,PDO $pdo)    {        $stmt = $pdo -> prepare("SELECT * FROM products WHERE id=?");        $stmt -> execute(array($id));        $row = $stmt -> fetch();        if(empty($row)){            return null;        }        switch($row['type'])        {            case 'book' :                $product = new BookProduct($row['title'],$row['first_name'],$row['main_name'],$row['price'],$row['num_pages']);            break;            case 'cd' :                $product = new CdProduct($row['title'],$row['first_name'],$row['main_name'],$row['price'],$row['play_length']);            break;            default :                $product = new ShopProduct($row['title'],$row['first_name'],$row['main_name'],$row['price']);            break;        }        $product -> setId($row['id']);        $product -> setDiscount($row['discount']);        return $product;    }}// 若派生类没有定义构造方法,则它在实例化是会自动调用父类的构造方法。子类默认继承父类所有的 public 和 protected 方法,但不继承 private 方法和属性class BookProduct extends ShopProduct{    private $numPages;    // 每个子类在设置自己的属性前调用父类的构造方法,基类现在仅知道自己的数据,子类一般是父类的特列,应该避免告诉父类任何关于子类的消息。    public function __construct($title,$mainName,$firstName,$price,$numPages)    {        // parent 关键字可以在任何复写父类方法的方法中使用,通过在当前对象中调用父类的方法来拓展父类的功能 , 要应用一个类而不是对象的方法,使用 :: 而不是 ->        parent::__construct($title,$mainName,$firstName,$price);        $this -> numPages = $numPages;    }    /**     * @param $numPages 书的页数     * @return mixed    总页数     */    public function getNumberOfPages()    {        return $this->numPages;    }    /**     *  子类(派生类)可以覆盖和修改父类(基类或超类)的功能     * @return string Book发票的摘要信息     */    public function getSummaryLine()    {        $base = parent::getSummaryLine();        $base .= "page count - {$this->numPages}";        return $base;    }}class CdProduct extends ShopProduct{    private $playLength;    public function __construct($title,$mainName,$firstName,$price,$playLength)    {        parent::__construct($title,$mainName,$firstName,$price);        $this -> playLength = $playLength;    }    /**     * @return int 播放时间     */    public function getPlayLength()    {        return $this -> playLength;    }    /**     * @return string CD发票的摘要信息     */    public function getSummaryLine()    {        $base = parent::getSummaryLine();        $base .= "playing time - {$this->playLength}";        return $base;    }}$product = ShopProduct::getInstance(1,$pdo);     // 该静态方法根据传入 id 的不同生成特定类型的对象if($product){    print "author : {$product -> getProducer()} ";              // author :Lun Xun    print "summary line: {$product -> getSummaryLine()}";      // summary line: Kong Yiji ( Xun,Lun) page count - 200}

登录后复制

推荐学习:《PHP视频教程》

以上就是php怎么使用静态方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2112187.html

(0)
上一篇 2025年2月24日 16:12:47
下一篇 2025年2月20日 19:39:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php中$_get和$_post怎么用

    在php中,“$_get”用于收集来自“method=”get””的表单中的值,即接收form表单中使用GET方法提交的表单数据;“$_post”用于收集来自“method=”post””的表…

    2025年2月24日
    200
  • php怎么计算两个日期相差几周

    php计算两个日期相差几周的方法:首先创建一个PHP示例文件;然后通过“function format($a,$b){…}”等方法实现计算两个日期间隔的周数即可。 本文操作环境:windows7系统、PHP7.1版,DELL G…

    2025年2月24日
    200
  • php怎么去除所有特殊字符

    php去除所有特殊字符的方法:首先创建一个PHP示例文件;然后通过“function replace_specialChar($strParam){…}”过滤所有特殊字符即可。 本文操作环境:windows7系统、PHP7.1版…

    2025年2月24日
    200
  • php curl ssl不开启怎么设置

    php curl不开启ssl的方法:首先打开相应的PHP文件;然后通过“curl_setopt($this->curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE)…”取消ssl验证即可。 …

    2025年2月24日
    200
  • php不支持unicode是什么意思

    php不支持unicode是指PHP字符串不保存字符的编码信息,所以原生操作函数,并不知道二进制数据该如何对应文本,只能假设一个字符对应单个字节;这样在处理英文等ascii码时就够用,但对于中文等多字节字符,就会出错。 本文操作环境:win…

    2025年2月24日
    200
  • php 数组分页的实现方法

    在php中可以通过数组分页函数array_slice()来实现分页功能,其使用语法如“array_slice($article,$start,$pagesize);”。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑…

    2025年2月24日
    200
  • string php如何替换字符串

    在PHP中有两个函数可以实现替换字符串,分别是:1、substr_replace函数,该函数用于把字符串的一部分替换为另一个字符串;2、str_replace函数,该函数用于一个字符串替换字符串中的另一些字符。 本文操作环境:windows…

    2025年2月24日
    200
  • php怎么去掉空白字符串

    php去掉空白字符串的方法:1、通过“preg_replace(“/s+/”, “”, $var);”删除字符串中的所有空白字符;2、通过“preg_replace(“/s| /&…

    2025年2月24日
    200
  • php怎么设置SESSION_ID

    php设置SESSION_ID的方法:首先创建一个PHP示例文件;然后通过语法“session_id(string [id]);”来设置Session会话ID即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 p…

    2025年2月24日
    200
  • php nts什么意思

    php nts是指“None-Thread Safe”,表示非线程安全;在PHP中一般以fast cgi方式运行的时候选择nts版本,具有更好的性能。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php nts什…

    2025年2月24日
    200

发表回复

登录后才能评论