在php中静态方法我们就直接在函数或变量前加一个static就可以了,使用的时候和静态变量差不多,不需要实例化,直接用::调用了,下面我来给大家举几个关于静态方法实例。
PHP也不例外!所谓静态方法(属性)就是以static关键词标注的属性或者方法(例如:静态属性public static username;)
静态方法和非静态方法最大的区别在于他们的生命周期不同,用一个实例来说明静态方法定义,定义静态方法很简单,在声明关键词function之前加上static,实例代码如下:
1 2 3 4 5 6 7 | class A
{
static function fun()
{
}
}
|
ログイン後にコピー
静态方法使用
使用的时候和静态变量差不多,不需要实例化,直接用::调用,实例代码如下
A::fun()
对比普通方法
因为静态方法的调用不需要实例化,所以在静态方法中引用类自身的属性或者方法的时候会出错,也就是形如self和$this是错误的,实例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php
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');
?>
|
ログイン後にコピー
再看一实例,用一个实例来说明,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php
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';
$objUser = new user('123456');
$objUser ->sshow();
unset( $objUser );
echo '
Username:', user:: $username ;
?>
|
ログイン後にコピー
从这里实例中可以看出,静态属性在类实例化以前就起作用了,并且在对象被销毁时静态属性依然可以发挥作用!
也因为静态方法的这种属性,所以不能在静态方法中调用非静态属性或者方法
接着看
1、php类中,假设所有的属性与方法的可见性为public,那么在外部访问类的方法或属性时,都必须通过对象【类的实例化过程】来调用,实例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php
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不可用。
文章网址:
随意转载^^但请附上教程地址。