欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Php面向对象?静态成员

程序员文章站 2024-01-18 19:45:28
...
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.