|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
会MYSQL吗?会,我会把我的信息在数据库里插入删除啦 static关头字用来润色属性、办法,称这些属性、办法为静态属性、静态办法。
static关头字声明一个属性或办法是和类相干的,而不是和类的某个特定的实例相干,因而,这类属性或办法也称为“类属性”或“类办法”
假如会见掌握权限答应,可不用创立该类对象而直接利用类名加两个冒号“::”挪用。
static关头字可以用来润色变量、办法。
不经由实例化,就能够直接会见类中static的属性和static的办法。
static 的属性和办法,只能会见static的属性和办法,不克不及类会见非静态的属性和办法。由于静态属性和办法被创立时,能够还没有任何这个类的实例可以被调
用。
static的属性,在内存中只要一份,为一切的实例共用。
利用self:: 关头字会见以后类的静态成员。
一个类的一切实例,共用类中的静态属性。
也就是说,在内存中即便有多个实例,静态的属性也只要一份。
上面例子中的设置了一个计数器$count属性,设置private 和 static 润色。
如许,外界其实不能直接会见$count属性。而法式运转的了局咱们也看到多个实例在利用统一个静态的$count 属性。
<?php
class user
{
private static $count = 0 ; //纪录一切用户的登录情形.
public function __construct() {
self::$count = self::$count + 1;
}
public function getCount() {
return self::$count;
}
public function __destruct() {
self::$count = self::$count - 1;
}
}
$user1 = new user();
$user2 = new user();
$user3 = new user();
echo "now here have " . $user1->getCount() . " user";
echo "<br />";
unset($user3);
echo "now here have " . $user1->getCount() . " user";
?>
静态属性直接挪用
静态属性不需求实例化就能够直接利用,在类还没有创立时就能够直接利用。
利用的体例是: 类名::静态属性名
<?php
class Math
{
public static $pi = 3.14;
}
// 求一个半径3的园的面积。
$r = 3;
echo "半径是 $r 的面积是<br />";
echo Math::$pi * $r * $r;
echo "<br /><br />";
//这里我感觉 3.14 不敷准确,我把它设置的更准确。
Math::$pi = 3.141592653589793;
echo "半径是 $r 的面积是<br />";
echo Math::$pi * $r * $r;
?>
类没有创立,静态属性就能够直接利用。那静态属性在甚么时分在内存中被创立? 在PHP中没有看到相干的材料。援用Java中的概念,来注释应当也具有通用性
。静态属性和办法,在类被挪用时创立。
静态办法
静态办法不需求地点类被实例化就能够直接利用。
利用的体例是类名::静态办法名
上面咱们持续写这个Math类,用来停止数学盘算。咱们设计一个办法用来算出个中的最大值。既然是数学运算,咱们也没有需要去实例化这个类,假如这个办法
可以拿过去就用就便利多了。咱们这只是为了演示static办法而设计的这个类。在PHP供应了 max() 函数对照数值。
view plaincopy to clipboardprint?
<?php
class Math
{
public static function Max($num1, $num2) {
return $num1 > $num2 ? $num1 : $num2;
}
}
$a = 99;
$b = 88;
echo "显示 $a 和 $b 中的最大值是";
echo "<br />";
echo Math::Max($a, $b);
echo "<br />";
echo "<br />";
echo "<br />";
$a = 99;
$b = 100;
echo "显示 $a 和 $b 中的最大值是";
echo "<br />";
echo Math::Max($a,$b);
?>
静态办法若何挪用静态办法
第一个例子,一个静态办法挪用其它静态办法时,利用self::
<?php
// 完成最大值对照的Math类。
class Math
{
public static function Max($num1, $num2) {
return $num1 > $num2 ? $num1 : $num2;
}
public static function Max3($num1, $num2, $num3) {
$num1 = self::Max($num1, $num2);
$num2 = self::Max($num2, $num3);
$num1 = self::Max($num1, $num2);
return $num1;
}
}
$a = 99;
$b = 77;
$c = 88;
echo "显示 $a $b $c 中的最大值是";
echo "<br />";
echo Math::Max3($a, $b, $c);
?>
静态办法挪用静态属性
利用self:: 挪用本类的静态属性。
<?php
//
class Circle
{
public static $pi = 3.14;
public static function circleAcreage($r) {
return $r * $r * self::$pi;
}
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>
静态办法不克不及挪用非静态属性 。不克不及利用self::挪用非静态属性。
<?php
// 这个体例是毛病的
class Circle
{
public $pi = 3.14;
public static function circleAcreage($r) {
return $r * $r * self::pi;
}
}
$r = 3;
echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r);
?>
也不克不及利用 $this 获得非静态属性的值。
静态办法挪用非静态办法
PHP5中,在静态办法中不克不及利用 $this 标识挪用非静态办法。
<?php
// 完成最大值对照的Math类。
class Math
{
public function Max($num1, $num2) {
echo "bad<br />";
return $num1 > $num2 ? $num1 : $num2;
}
public static function Max3($num1, $num2, $num3) {
$num1 = $this->Max($num1, $num2);
$num2 = $this->Max($num2, $num3);
$num1 = $this->Max($num1, $num2);
return $num1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a $b $c 中的最大值是";
echo "<br />";
echo Math::Max3($a, $b, $c); //一样的这个会报错
?>
当一个类中有非静态办法被self:: 挪用时,体系会主动将这个办法转换为静态办法。
<?php
// 完成最大值对照的Math类。
class Math
{
public function Max($num1, $num2) {
return $num1 > $num2 ? $num1 : $num2;
}
public static function Max3($num1, $num2, $num3) {
$num1 = self::Max($num1, $num2);
$num2 = self::Max($num2, $num3);
$num1 = self::Max($num1, $num2);
return $num1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "显示 $a $b $c 中的最大值是";
echo "<br />";
echo Math::Max3($a, $b, $c);
?>
来自PHP100服装论坛 http://bbs.php100.com
不可能吃饭的时候咬了自己一下舌头就从此不吃饭了不是?放下畏惧,继续努力,咱们是来征服它的,而不是被它征服的,振奋起来吧同志。 |
|