php面向对象基础知识

作者:zccst

类和对象的概念

批注:面向对象部分几乎是从Java照搬过来的。就当再熟悉一遍。当然,最重要的是实践,动手运行一遍那些不怎么常用的地方。

属性

方法
方法的参数形式和传递方式
方法的参数可以是基本数据类型、数组和类对象。
基本数据类型:值参传递
数组:值参传递
类对象:引用传递


属性和方法的访问


构造函数
构造函数是在类中起到初始化的作用
构造函数的生成方法与其他函数一样只是其名称必须是__construct().
语法格式:function __construct(参数){
。。。。。。。。
}
范例:

class Person{
public $name;
public $sex;
public $age;
function __construct($name,$sex,$age){
echo "我是构造函数<br>";
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
}

输出结果:初始化
析构函数
当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。应在退出前在析构函数中用释放内存。
析构函数__destruct 析构函数没有任何参数
范例:

class person{
function __destruct(){echo "bye bye !“; }
}
$a=new person();


__get与__set
一般说把类私有话更符合现实的逻辑。
预定义两种函数来进行获取与赋值操作。
__get 获取值通常是域的值
__set 设置值通常是域的值
__call 调用一个对象中不存在的方法时,就会产生错误call()这个方法来处理这种情况。


/**** static ***/
static关键字 来声明静态方法
static静态变量 在类的内部生成一个静态变量 就是能够被所有类的实力化共想 也就是说静态成员则放到了“初始化静态段”,在类第一次被加载的时候放入的,可以让堆内存里面的每个对象所共享
使用方法:self::$静态属性、self::静态方法

static function p(){
echo self::$country;
echo self::PI;//访问常量
//echo $this->name;在静态方法中只能操作静态属性
//self::p();
}

外部调用:类::$静态属性、类::静态方法


const关键字:用来生成常量 常量是唯一的不能改变的 惯例常量为大写
const CONSTANT = 'constant value'; 生成一个常量
echo self::CONSTANT;//类内部访问
echo ClassName::CONSTANT;//类外部访问


覆盖父类原有属性
clone克窿对象 语法格式$c=clone $p; $c克窿的对象$p 输出echo $c->name;

对象比较
===两个比较运算符。
==是比较两个对象的内容。
===是比较对象的句柄,即引用地址。


instanceof操作符用于检测对象实力是否属于某一个类的类型 属于返回true 不属于返回false
__clone()如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法
function __clone(){
$this->name="我是一个克隆人";
}


final表示一个类是最终版本 也就是说它不能在被子类调用


多态性

多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。
就是说同一种方法在子类与父类中执行的结果不同。

class A {
function info(){
echo “A INFO”;
}
}
class B extends A {
function info(){
echo “B INFO”;
}
}
class C extends A {
function info(){
echo “C INFO”;
}
}
function printinfo($obj){
function printinfo(A $obj){
if($obj instanceof A)
$obj->info();
$obj->info();
}
}
$a=new A(); $b=new B(); $c=new C();
printinfo($a); //输出A INFO
printinfo($b); //输出B INFO
printinfo($c); //输出C INFO



抽象方法和抽象类
抽象类不能被实例化,一个抽象类中,必须有一个抽象方法。但是抽象类中可以定义动态函数。

abstract class Person{
public $name;
abstract function getInfo();
}

抽象方法是作为子类模板使用的。


接口
当一个类继承了一个接口之后,它要覆盖接口的所有方法。
接口只能声明常量,
接口的方法必须定义为公有,否则无法继承。

接口可以与多个接口间继承

语法:

interface PCI{
const TYPE="PCI";
//public $name; error
function start();
function stop();
}

接口中的方法可以声明为static

interface A{ function a();}

interface B{ function b();}

interface C extends A{
function c();
}

class D implements B,C{
function a(){}
function b(){}
function c(){}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值