在php中静态方法我们就直接在函数或变量前加一个static就可以了,使用的时候和静态变量差不多,不需要实例化,直接用::调用了,下面我来给大家举几个关于静态方法实例。

PHP也不例外!所谓静态方法(属性)就是以static关键词标注的属性或者方法(例如:静态属性public static username;)

静态方法和非静态方法最大的区别在于他们的生命周期不同,用一个实例来说明

静态方法定义

定义静态方法很简单,在声明关键词function之前加上static,例如:

 代码如下 复制代码

class A

{

static function fun()

{

// do somathing

}

}

静态方法使用

使用的时候和静态变量差不多,不需要实例化,直接用::调用,例如:

 代码如下 复制代码

A::fun()

对比普通方法

因为静态方法的调用不需要实例化,所以在静态方法中引用类自身的属性或者方法的时候会出错,也就是形如self和$this是错误的。

 代码如下 复制代码

class MyClass

{

public $num = 5;

function __construct()

{

$this->num = 10;

}

function fun_1()

{

echo "I am a public method named fun_1.n";

echo "The num of object is {$this->num}.n";

}

static function fun_2()

{

echo "I am a static method named fun_2.n";

}

function fun_3($n)

{

echo "The arg is {$n}n";

}

}

$m = new MyClass;

$m->fun_1();

$m->fun_2();

$m->fun_3('test');

MyClass::fun_1();

MyClass::fun_2();

MyClass::fun_3('test');

输出结果:

lch@localhost:php $ php class_method.php

I am a public method named fun_1.

The num of object is 10.

I am a static method named fun_2.

The arg is test

I am a public method named fun_1.

PHP Fatal error:  Using $this when not in object context in /Users/lch/program/php/class_method.php on line 14

再看一实例

用一个实例来说明。

 代码如下 复制代码

class user{

public static $username;   //声明一个静态属性

public $password;     //声明一个非静态属性

function __construct($pwd) {

echo ‘Username:’,self::$username;   //输出静态属性

self::$username = ‘admin’;  //为静态属性赋值

$this->password = $pwd;   //为非静态属性赋值

}

public function show(){    //输出类属性

echo ‘

Username:’,self::$username;

echo ‘

Password:’,$this->password;

}

public static function sshow(){

echo ‘

Username:’,self::$username;

echo ‘

Password:’,$this->password;

}

}

user::$username = ‘root’;    //为赋值user类的静态属性赋值

$objUser = new user(’123456′);     //实例化user类

$objUser->sshow();

unset($objUser);

echo ‘

Username:’,user::$username;

/*

* 输出结果为:

* Username:root

* Username:admin

* Password:123456

* Usern

ame:admin

* */

从这里实例中可以看出,静态属性在类实例化以前就起作用了,并且在对象被销毁时静态属性依然可以发挥作用!

也因为静态方法的这种属性,所以不能在静态方法中调用非静态属性或者方法

接着看

1、php类中,假设所有的属性与方法的可见性为public,那么在外部访问类的方法或属性时,都必须通过对象【类的实例化过程】来调用。

eg:

 代码如下 复制代码

class Log

{

public $root = DIRECTORY_SEPARATOR;

public $logPath = '/data/app/www/test-realtime.monitoring.c.kunlun.com/log';

public $defaultDir = 'default';

public function writeLog($logName, $logType, $data, $newDir = FALSE)

{

$fileName = '';

if (!file_exists($this->logPath))

{

mkdir($this->logPath, 0777);

}

if ($newDir !== FALSE)

{

@mkdir($this->logPath.$this->root.$newDir, 0777);

$fileName = $this->logPath.$this->root.$newDir.$this->root.date('Y-m-d', time()).'_'.$logName.'_'.$logType.'.log';

}

else

{

@mkdir($this->logPath.$this->root.$this->defaultDir, 0777);

$fileName = $this->logPath.$this->root.$this->defaultDir.$this->root.date('Y-m-d', time()).'_'.$logName.'_'.$logType.'.log';

}

file_put_contents($fileName, date('Y-m-d H:i:s').' '.$data."n", FILE_APPEND);

}

}

类的实例化对象的过程:$logObj = new Log();

访问类中的方法:$logObj->writeLog($param1, $param2, $param3, $param4);

访问类中的属性:echo $logObj->root;

2、如果类中的属性前被static关键字修饰时,就不能通过对象来访问被static修饰的属性,但如果是类中的方法被static修饰时则即可以通过对象也可以通过类名::方法名的方式来进行访问。

3、如果类中的方法被static修饰则,方法中不能用$this,$this指的是类的实例化对象,由于静态方法不用通过对象就可以调用,所以伪变量$this不可用。

php类实例方法静态方法,PHP类中的静态方法使用实例相关推荐

  1. php 能打印一个没有实例化的类_你理解 PHP 中的静态方法吗?

    它仍然是一个有争议的话题.让我们尝试了解原因. 函数中的静态变量 您可能已经看过以下代码: function testStatic() {static $x = 0;$x++;return $x; } ...

  2. python类初始化导入库_Python中optparser库用法实例详解

    本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常 ...

  3. python类中方法调用自己类的方法_python 类中方法总结 --- 实例方法、类方法、静态方法...

    在python的类语法中,可以出现三种方法,具体如下: (1)实例方法 1)第一个参数必须是实例本身,一般使用[self]表示. 2)在实例方法中,可以通过[self]来操作实例属性,[类名]来操作类 ...

  4. python 类和对象 atm_Python 类和对象

    1.python中初始化实例属性 必须在__init__(self,-)方法内(注意:双下划线)初始化实例,第一个参数必须为self. 如需动态添加属性,可用 **kw class Person(ob ...

  5. [转载] Java中的静态方法不能被子类重写

    参考链接: 可以在Java中重载或重写静态方法吗 Java中的静态方法不能被子类重写 特点:静态方法属于类的方法,也属于对象的方法,但是静态方法随类的存在. 结论:Java中的静态方法不能被子类重写, ...

  6. Python 类—类属性(私有属性、公有属性、实例属性、局部变量)类方法(实例方法、静态方法)

    1. 创建类 类是对某个对象的定义,它包含有关对象动作方式的信息,包括它的名称.方法.属性和事件.类不存在于内存中,因此它本身并不是对象.当程序运行需要引用类的代码时,就会在内存中创建一个类的新实例, ...

  7. python 类方法 静态方法_python中类方法、类实例方法、静态方法的使用与区别

    注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: class Foo: def __init__(self, name): self.name = name ...

  8. Python中类方法、类实例方法、静态方法,私有属性和私有方法有何区别?

    类方法 是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用. 使用格式: 对类的属性进行操作,就要用类的方法. @class ...

  9. python类的静态属性和静态方法_详解Python中的静态方法与类成员方法

    前言 因为Python的水平目前一直是处于能用阶段,平时写的脚本使用的Python的写法也比较的简单,没有写过稍微大一点的项目.对Python中的类,类之间的组织关系,整个项目中类之间如何耦合还缺乏认 ...

  10. python中的静态方法如何调用_关于Python中如何使用静态、类、抽象方法的权威指南(译)...

    对于Python中静态.类.抽象方法的使用,我是一直很迷糊的.最近看到一篇技术文章对这方面解释的很好,在此翻译一下,加深印象,也为有需要的同学提供一个方便. Python中方法是如何工作的: 方法即函 ...

最新文章

  1. 网易严选 x 网易有数:数据产品+数据中台双引擎模式实践
  2. 完整约束三(学习笔记)
  3. C++ 中 vector 的作用:
  4. android 字符串下标,android – 在TextView中为特定字符设置下标和上标?
  5. 前端学习(10):HTML语义化
  6. [.Net线程处理系列]专题五:线程同步——事件构造
  7. Cry On My Shoulder (背景音乐)
  8. 12.MongoDB之固定集合(Capped Collections)
  9. 医学图像分割--U-Net: Convolutional Networks for Biomedical Image Segmentation
  10. 人月神话(40周年中文纪念版)
  11. 人工智能第六章——约束满足问题(CSP)
  12. Win10系统安装软件为了对电脑进行保护,已经阻止此应用解决方法
  13. 路由器的应用场所及作用
  14. 如何成为优秀的软件人才
  15. 设计模式六大原则——单一职责原则(SRP)
  16. mysql inet aton ipv6_Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
  17. 虚拟局域网vlan以及技术
  18. Linux内核数据包格式
  19. EarlyZ 与 DepthPrePass
  20. gym安装box2d遇到的问题

热门文章

  1. 计算机硬件与游戏发展史,电脑硬件的发展历程中 什么是电竞SSD?
  2. mysql中的表连接知识点_Mysql知识点总结
  3. jakarta_适用于Java EE / Jakarta EE开发人员的Micronaut
  4. 字节跳动_掌握Java字节码
  5. mysql数据采集中间件_开源 | MySQL数据传输中间件—DTLE
  6. idea远程调试修改代码_使用IDEA远程调试线上代码
  7. redux异步action_Redux数据状态管理
  8. 小巧但强大,浏览器开发常用工具插件一枚
  9. 皮一皮:这位家长,建议自己退群聊...
  10. 面试:说说啥是一致性哈希算法?