PHP类和对象
- 类 定义了一件事物的抽象特点,类的定义包含了数据的形式以及对数据的操作。
- 对象 类的实例
- 成员变量 定义在类内部的变量。成员变量的值对外不时可见的,可以通过成员函数访问,当类被实例化成为对象后,成员变量可称为对象的属性。
- 成员函数 定义在类的内部,可用于访问对象的数据。
- 继承 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。使用extends关键字
- 父类 一个类被其他类继承,可将该类成为父类,也可称为基类或者超类。
- 子类 一个类继承其他类称为子类,也可称为派生类。
//声明一个类
<?php
class Site
{
var $url;
var $title;
function setUrl($par)
{
$this->url=$par;
}
function getUrl()
{
echo $this->url . PHP_EOL;
}
function setTitle($par)
{
$this->title=$par;
}
function getTitle()
{
echo $this->title . PHP_EOL;
}
}
//创建对象
$runoob = new Site;
$taobao = new Site;
$google = new Site;
//调用成员函数
$runoob->setTitle('菜鸟教程');
$taobao->setTitle('淘宝');
$google->setTitle('Google 搜索');
$runoob->setUrl('www.runoob.com');
$taobao->setUrl('www.taobao.com');
$google->setUrl('www.google.com');
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
/*运行结果
菜鸟教程
淘宝
Google 搜索
www.runoob.com
www.taobao.com
www.google.com
*/
PHP构造函数
构造函数是一种特殊的方法。用来在创建对象时初始化对象,为对象的属性赋初始值,在创建对象的语句中与new运算符一起使用
//将上面的代码改为使用构造函数新建对象
<?php
class Site
{
var $url;
var $title;
function __construct($par1,$par2)
{
$this->url=$par1;
$this->title=$par2;
}
function getUrl()
{
echo $this->url . PHP_EOL;
}
function getTitle()
{
echo $this->title . PHP_EOL;
}
}
$runoob = new Site('菜鸟教程','www.runoob.com');
$taobao = new Site('淘宝','www.taobao.com');
$google = new Site('Google 搜索','www.google.com');
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
//运行结果同上
PHP析构函数
析构函数与构造函数相反,当对象结束其生命周期后,系统会自动执行析构函数
PHP访问控制
PHP对属性或方法的访问控制,是通过在前面添加关键字public(公有),**protected(受保护)或private(私有)**来实现的。
- public(公有):公有类成员可以在任何地方被访问
- protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
- private(私有):私有的类成员则只能被其定义所在的类访问。
属性的访问控制
<?php
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo '<br>';
echo $this->protected;
echo '<br>';
echo $this->private;
echo '<br>';
}
}
$obj= new MyClass();
echo $obj->public;
echo '<br>';
//这样访问会报错 echo $obj->protected;
//这样访问也会报错 echo $obj->private'
echo $obj->printHello();
class MyClass2 extends MyClass
{
function printHello1()
{
echo $this->public;
echo '<br>';
echo $this->protected;
echo '<br>';
echo $this->private;
echo '<br>';
}
}
/*
MyClass2是MyClass的子类,MyClass2继承了MyClass的成员变量和成员函数,但是对于父类的private成员变量,只能用父类的成员函数去访问。
*/
$obj2= new Myclass2();
//调用父类的printHello()函数
$obj2->printHello();
//调用子类的printHello1()函数
$obj2->printHello1();
方法的访问控制
类中的方法可以被定义为公有、私有或受保护。如果没有设置,则该方法默认为公有。
<?php
class MyClass
{
public function __construct(){}
public function MyPublic(){
echo "public";
echo "<br>";
}
protected function MyProtected(){
echo "protect";
echo "<br>";
}
private function MyPrivate(){
echo "private";
echo "<br>";
}
function Foo()
{
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass = new MyClass();
$myclass->MyPublic();
//在类外访问保护方法,会产生一个致命错误
//$myclass->MyProtected();
//在类外访问私有方法,会产生一个知名错误
//$myclass->MyPrivate();
$myclass->Foo();
class MyClass2 extends MyClass
{
function foo2()
{
$this->MyPublic();
$this->MyProtected();
//在子类中访问父类的私有方法,会产生一个致命错误
//$this->MyPrivate();
}
}
$myclass2 = new MyClass2;
$myclass2->MyPublic();
$myclass2->foo2();