抽象
静态关键字static和self
static关键字是在类中描述成员属性和成员方法是静态的;前面声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”的属性,这样用“Person”这个类实例化出几百个或者更多个实例对象,每个对象里面就都有“所属国家”的属性了,如果开发的项目就是为中国人而开发的,那么每个对象里面就都有一个国家的属性是 “中国“其它的属性是不同的,如果我们把“国家”的属性做成静态的成员,这样国家的属性在内存中就只有一个,而让这几百个或更多的对象共用这一个属性。
作用:
static成员能够限制外部的访问,因为static的成员是属于类的,是不属于任何对象实例,是在类第一次被加载的时候分配的空间,其他类是无法访问的,只对类的实例共享,能一定程度对类该成员形成保护;
static方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用!
class Ren
{
public $name="张三";
public static $zhongzu; //静态成员
//普通方法
function Say()
{
echo self::$zhongzu."你好";
}
//静态方法
static function Run()
{
//echo $this->name; 静态方法不能调用非静态属性
echo self::$zhongzu;
}
}
Ren::$zhongzu = "战斗民族";//静态属性赋值
Ren::Run(); //调用静态方法
$r = new Ren();
$r->Say();
结果:

//普通成员
//普通成员是属于对象的
//静态成员
//静态成员是属于类的
//普通方法里面可以调用静态成员
//静态方法里面不能调用普通成员
//self关键字 在类里面代表该类
抽象
抽象类
不能被实例化
做为父类使用
abstract class Demo
{
var $test;
abstract function fun1();
abstract function fun2();
function fun3()
{
...
}
}
$demo = new Demo(); // 抽象类不能产生实例对象,所以这样做是错的,实例化对象交给子类
class Test extends Demo
{
function fun1()
{
...
}
function fun2()
{
...
}
}
$test = new Test(); // 子类可以实例化对象,因为实现了父类中所有抽象方法
实例:
abstract class YunSuan
{
public $a;
public $b;
function Suan()
{
}
}
class Jia extends YunSuan
{
function Suan()
{
return $this->a+$this->b;
}
}
class Jian extends YunSuan
{
function Suan()
{
return $this->a-$this->b;
}
}
class Cheng extends YunSuan
{
function Suan()
{
return $this->a*$this->b;
}
}
$cheng = new Cheng();
$cheng->a=10;
$cheng->b=5;
echo $cheng->Suan();
结果:50
接口
//极度抽象的类
//接口里面的方法主要是用来控制子类必须实现该方法
interface IUSB
{
function Read(); //接口里面只声明函数名
function Write();
}
class ShuBiao implements IUSB //子类中必须继承父类中所有函数
{
function Read()
{
echo "鼠标插上了";
}
function Write()
{
echo "给鼠标传了数据";
}
}
$s = new ShuBiao();
$s->Read();
结果:


浙公网安备 33010602011771号