当前位置:Gxlcms > PHP教程 > Php面向对象?静态成员

Php面向对象?静态成员

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

Php面向对象?静态成员

静态属性

使用static关键字声明的属性

该静态属性,在逻辑上,是定义在类上面的属性。保证一个类,对应一个属性。

例子:

class Student

{

public $stu_id;

public $stu_name;

public static $stu_count = 0;

public function __constuct($id,$name)

{

$this->stu_id = $id;

$this->stu_name = $name;

}
}

访问静态属性:

通过类来访问:在利用静态访问符号(::)

类::成员

例子:

class Student

{

public $stu_id;

public $stu_name;

public static $stu_count = 0;

public function __constuct($id,$name)

{

$this->stu_id = $id;

$this->stu_name = $name;

Student::$stu_count ++;

}
}

::的访问称之为静态访问,->为非静态访问(对象访问)

在访问静态属性时,如果是在类内访问:则可以使用self当前类

例子:

class Student

{

public $stu_id;

public $stu_name;

public static $stu_count = 0;

public function __constuct($id,$name)

{

$this->stu_id = $id;

$this->stu_name = $name;

self::$stu_count ++;

}
}

注意:$this 和 self 的区别

$this 表示的是这个对象,self表示这个类

静态方法

静态方法的逻辑意义,也是定义再类上的方法。同样,调用形式类::

例子:

class Student

{

public $stu_id;

public $stu_name;

public static $stu_count = 0;

public function __constuct($id,$name)

{

$this->stu_id = $id;

$this->stu_name = $name;

self::$stu_count ++;

}

public static function sayCount()

{

echo “run static ”;

}
}

Student::sayCount();

静态方法和非静态方法,的主要区别,在于是否可以接收一个对象的执行环境。

就是是否可以为方法内的$this是否可以被赋值

只有在对象调用方法时,才能将对象执行环境传递到方法内,$this才可以被赋值。

静态方法中无法使用非静态属性。

一个静态方法,只能处理静态数据(静态属性)

例子:

class Student

{

public $stu_id;

public $stu_name;

public static $stu_count = 0;

public function __constuct($id,$name)

{

$this->stu_id = $id;

$this->stu_name = $name;

self::$stu_count ++;

}

public static function sayCount()

{

echo self::$stu_count;

}
}

Student::sayCount();

Php中特殊的方法访问问题:

强调:静态方法应该类来调用,非静态方法应该对象来调用

class C

{

public function f1()

{

echo‘f1
’;

}

public static function f2()

{

echo‘f2
’;

}

}

$o = new C;

$o->f1();

C::f2();

但是:

1. 无论静态还是非静态方法,都可使用类访问:不过如果类静态调用一个非静态方法,会报告一个语法不标准的错误。

2. 区别就在于$this上

只有再使用对象调用非静态方法时,才可以使用方法内的$this.

class C

{

public function f1()

{

echo‘f1
’;

}

public static function f2()

{

echo‘f2
’;

}

}

C::f1();

C::f2();

总结:类的静态方法和非静态方法,类都只保存一份,只是运行时的运行环境不同。只有再使用对象调用非静态方法时,才可以使用方法内的$this.

人气教程排行