前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >php学习之类与对象的类的静态方法

php学习之类与对象的类的静态方法

作者头像
吾爱乐享
发布于 2019-12-30 09:09:44
发布于 2019-12-30 09:09:44
63900
代码可运行
举报
文章被收录于专栏:吾爱乐享吾爱乐享
运行总次数:0
代码可运行

基本介绍

当程序员需要对静态属性进行操作时,就需要定义静态方法处理,静态方法是专门操作静态属性的

基本语法

class 类名{

访问修饰符 static function 函数名 (){

//函数体

}

}

说明:

  1. 静态方法是在类中定义的
  2. static是关键词
  3. 静态方法是专门用于操作静态属性
  4. 静态方法可以直接用类名调用,形式是:类名::静态方法名(参数)

小案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

//静态方法
class Person{
public $name;
private static $age=18;
//静态方法来操作静态属性
public static function getAge(){
echo '年龄是 '.self::$age;
}
}
//通过类名在外部直接调用静态方法
Person::getAge();
?>

静态方法注意事项

  • 在类的外部调用静态方法:类名::静态方法名,或者对象名->静态方法名或者对象名::静态方法名,后面两种不推荐使用
  • 在类的内部调用静态方法:self::静态方法名  或者类名::静态方法名,通过$this也可以
  • 静态方法中只能访问静态属性, 不能访问非静态属性
  • 普通成员方法,既可以访问非静态属性也可以访问静态属性
  • 如果静态方法被protected或private修饰,也不能在类的外部使用

案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

//静态方法
class Person{
public $name;
private static $age=18;

//构造方法
public function __construct($name){
$this->name=$name;
}
//静态方法来操作静态属性
public static function getAge(){
echo '年龄是 '.self::$age;
//静态方法中只能访问静态属性,不能访问非静态属性
//echo $this->name.'的年龄是 '. self::$age;//这样写是错误的 不能访问非静态属性
//echo self::$name.'的年龄是 '. self::$age;//这样写也是错误的 不能访问非静态属性
}
//在类的内部调用静态方法
public function show(){
//方法一:self::方法名
self::getAge();
//方法二:类名::方法名
Person::getAge();
//方法三:$this->方法名
$this->getAge();
}
}


//通过类名在外部直接调用静态方法
Person::getAge();
//在类的外部通过对象调用静态方法
$person = new Person('张三');
$person->getAge();
//在类的外部通过对象名::静态方法调用
$person::getAge();

$person->show();
?>

静态属性和静态方法实战: 单例模式

编写一个操作数据库的工具类,要求只能创建一个对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//编写一个操作数据库的工具类,要求只能创建一个对象

class DaoMysql{
//定义需要的属性
//连接数据库
private $mysql_link;
//定义一个静态属性,用来类的对象实例
private static $instance = null;
//构造方法
public function __construct($host,$user,$pass){
//这里只连接一次数据库,减少资源

$this->mysql_link = @mysql_connect($host,$user,$pass);
echo $this->mysql_link;
}
//写一个静态方法,通过这个静态方法来创建对象实例
public static function getSingleton($host,$user,$pass){
//通过getSingleton来创建对象
//判断控制是否已经创建过对象
if(self::$instance == null){
self::$instance = new DaoMysql($host,$user,$pass);
}
return self::$instance;
}
//阻止克隆
private function __clone(){}
}

$dao1 = DaoMysql::getSingleton('localhost','root','');
$dao2 = DaoMysql::getSingleton('localhost','root','root');
var_dump($dao1,$dao2);//结果都是同一个对象

?>

另一种写法(推荐)

instance是类型运算符,它用于判断某个变量是否是某个类的对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//编写一个操作数据库的工具类,要求只能创建一个对象

class DaoMysql{
//定义需要的属性
//连接数据库
private $mysql_link;
//定义一个静态属性,用来类的对象实例
private static $instance = null;
//构造方法
public function __construct($host,$user,$pass){
//这里只连接一次数据库,减少资源

$this->mysql_link = @mysql_connect($host,$user,$pass);
echo $this->mysql_link;
}
//写一个静态方法,通过这个静态方法来创建对象实例
public static function getSingleton($host,$user,$pass){
//通过getSingleton来创建对象
//判断控制是否已经创建过对象
/* //第一种写法
if(self::$instance == null){
self::$instance = new DaoMysql($host,$user,$pass);
}
return self::$instance;
} */
//第二种写法
//instanceof是类型运算符,它用于判断某个变量是否是某个类的对象
if(!self::$instance instanceof self){
self::$instance = new self($host,$user,$pass);
}
return self::$instance;
}
//阻止克隆
private function __clone(){}
}

$dao1 = DaoMysql::getSingleton('localhost','root','');
$dao2 = DaoMysql::getSingleton('localhost','root','root');
var_dump($dao1,$dao2);//结果都是同一个对象

?>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
适合普通大学生的 Java 后端开发学习路线
接下来的一段时间,帅地会总结各种技术栈的学习路线,例如 Java 开发,C++ 开发,python 开发,前端开发等等,假如你没有明确的目标,或许可以按照我说的学习路线来学习一波,我写的每一份学习路线,不会很全面,因为我认为,东西列的太多,反而不利于新手的学习,所以我列举的,都是比较必要的知识,当你把这些知识学了的时候,我相信你不需要别人的学习路线,也能知道自己接下来需要学啥了。
帅地
2021/04/14
6770
八股文,吐了
现在计算机专业是越来越卷了,在 2016 年那会,我朋友说他去培训班培训了 6 个月,就能找到一份月薪近万的工作,培训的内容也不怎么难,就是语言基础=》框架=〉做几个项目,之后就能上岗干活了。
帅地
2022/01/13
1.2K0
八股文,吐了
Java 后端开发学习路线(修订版)
接下来的一段时间,帅地会总结各种技术栈的学习路线,假如你没有明确的目标,或许可以按照我说的学习路线来学习一波。
帅地
2022/01/13
2.8K0
Java 后端开发学习路线(修订版)
五分钟自学编程:计算机网络到底应该怎么学?!
上一期我讲到了数据结构怎么学,当时我的学习方法是先看视频,再看书,然后刷一刷基础算法题做巩固。
程序员黄小斜
2020/02/17
1.5K0
Java后端工程师必备书单(含大后端方向相关书籍)
作者黄小斜,斜杠青年,某985硕士,阿里研发工程师,于2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer
程序员黄小斜
2019/03/11
3.3K0
万字长文 | 这可能是东半球最保姆级的后台服务器开发学习路线
这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其它人写得不一样, 也定下了一个目标,这篇文章,不能是简单的堆砌学习资源和书单推荐,更要细化如何有效的去执行落地。
灵魂画师牧码
2020/10/26
1.3K0
聊聊阿秀过去三年间做的最正确的一件事 | 快来薅羊毛
我买的大部分是技术书,也有一些非技术书,比如《明朝那些事儿》、《平凡的世界》之类的。
拓跋阿秀
2021/04/26
1.4K0
聊聊阿秀过去三年间做的最正确的一件事 | 快来薅羊毛
非科班渣渣的java校招
非科班渣渣的java校招 作者:看山跑不死马 链接:https://www.nowcoder.com/discuss/154825?type=2&order=3&pos=16&page=1 来源:牛客
牛客网
2019/05/05
9030
周末再聊聊Java学习路线
我相信这些读者或多或少都有一些 Java 基础,但由于看不到全貌,学了一段时间很容易迷失。所以我在寻思着能不能写一个学习的地图或者路线,让读者能知道下一步该学什么,自己离大厂的 offer还有多远的距离。
Java3y
2020/12/31
7620
周末再聊聊Java学习路线
不论你是大众,科班和非科班,我这边整理很久,总结出的学习路线,还不快卷起来
很多人对自我的学习路线没有清楚的定位,鉴于此,我就来写一篇适合普通大众的学习路线,就从大一入学那一刻开始入门说起,虽然不一定适合你,但或许能给没有明确目标的人带来一些学习的方向,那么这篇文章,我就觉得值了。
用户10216580
2022/12/06
4730
写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』
说实话,对于学习路线这种文章我一般是不写的,大家看我的文章也知道,我是很少写建议别人怎么样怎么样的文章,更多的是,写自己的真实经历,然后供大家去参考,这样子,我内心也比较踏实,也不怕误导他人。
全栈程序员站长
2022/09/13
7161
写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』
python,java,c语言哪个好_小萌新
才发现语言的选择也就那一回事,我猜不少人刚入门的人依然被这个问题困扰着,所以决定认真分享一波我的经历。
全栈程序员站长
2022/11/01
9040
【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?
我公众号里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化,而这些通用的底层知识,却是几乎不变的,了解了这些知识,可以帮助我们更快着学习一门知识,更加懂得计算机的运行机制。当然,在面试中也经常会被问到,特别是对于应届生,对于春秋招,也可以看看我前阵子写过的文章历经两个月,我的秋招之路结束了!。也有读者经常问的计算机基础知识究竟是指啥?学习顺序?推荐书籍?
kbsc13
2019/10/15
7270
Java学习之路 -- Java怎么学?
当时,作为懵懂的小白,大一学习了c和c++,还有数据结构,后来才自学的java。有了c++的基础,其实学java确实感觉挺容易上手。如果没有c或者c++的基础,建议开始需要先把java的基础打好,基础是指什么?基础的语法,能用!至于源码,不建议在刚刚开始学就看源码,绝对劝退!!!
秦怀杂货店
2021/03/29
1.3K0
Java学习必备书籍推荐终极版!
很早就想把书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇文章对你有帮助,不要再无书可看。
乔戈里
2019/05/13
1.6K0
【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?
在我们用的程序中,99% 都离不开网络,作为一个程序员,我觉得了解计算机网络是必须的,在大学的课程中,一般也都会开设这一门课。
乔戈里
2019/10/15
8620
荐书在精不在多,推荐一份夯实Java基础的必备书单!
每一年的年初都是买书学习热情高涨的时候,虽然不知道你们是让这些书吃灰还是真的会好好阅读,但是有一些书籍,我还是希望能够推荐给你们。
程序员黄小斜
2020/05/21
2.2K0
Java工程师核心书单推荐
书籍是获取知识的最好来源之一。技术书籍浩如烟海,市场上有不少《XXX入门到精通》,《XXX王者归来》,《21天学会XXX》这样的书,当然也有不少经典,个人的精力有限,这些经典不可能都通读。所以·,博主尝试整理一个Java工程师所需知识的核心书单,尽可能优中选优,挑选出Java工程师必备知识的一些最核心、最经典的书籍,希望能一起学习,一起进步。
三分恶
2021/03/16
6440
Java工程师核心书单推荐
程序员需要什么条件_大厂程序员啥意思
有句话叫做:投资啥都不如投资自己的回报率高。 从参加工作到现在,短短的几年内,我投资在自己身上的钱已超过三十多万,光买书籍的钱就已超过总投资的三分之一,买了不少于上千本书,有实体书,也有电子书。这些书不仅提升了我的技术能力,更提升了我的视野和认知。
全栈程序员站长
2022/09/23
1.9K0
程序员需要什么条件_大厂程序员啥意思
95后妹子面试的那些"套路"(附带个人书籍推荐)
最近有很多朋友问我一些面试题,或者说准备面试了,怎么复习啊. 孔孔老师就上线了…正好趁着早上不想学习, 就再把这一块总结总结. 个人拙见(毕竟我还是很low的…) 夹杂部分书推荐
kirito-moe
2019/04/30
9650
推荐阅读
相关推荐
适合普通大学生的 Java 后端开发学习路线
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验