一步一步学习PHP(6) 面向对象
程序员文章站
2023-08-19 20:52:58
但是我们知道,面向对象有三大特征:继承,多态和封装。 1. 继承 我们继续上一节中的例子,在php中,继承和java是一样的,都使用extends关键字。 复制代码 代码如...
但是我们知道,面向对象有三大特征:继承,多态和封装。
1. 继承
我们继续上一节中的例子,在php中,继承和java是一样的,都使用extends关键字。
class people
{
private $name;
public function getname()
{
return $this->name;
}
public function setname($name)
{
$this->name=$name;
}
}
class student extends people
{
private $grade;
public function sayhello()
{
echo("good morning,".parent::getname());
}
}
在这里,我们需要主要的还有我们访问父类在c# 中用base,在java中用super,但是在php中,我们用parent关键字。
如果我们要访问自身的方法,那么可以用this,也可以用self。
class student extends people
{
public function getname()
{
return "kym";
}
private $grade;
public function sayhello()
{
echo("good morning,".self::getname());
//echo("good morning,".$this->getname());
}
}
2. 抽象类
提到继承,就不得不说抽象类。
<?php
abstract class people
{
private $name;
public function getname()
{
return $this->name;
}
public function setname($name)
{
$this->name=$name;
}
abstract function sayhello();
}
class student extends people
{
public function sayhello()
{
echo("good morning,".parent::getname());
}
}
$s=new student();
$s->setname("kym");
$s->sayhello();
?>
3. 接口
接下来就是接口:
<?php
abstract class people
{
private $name;
public function getname()
{
return $this->name;
}
public function setname($name)
{
$this->name=$name;
}
abstract function sayhello();
}
interface irun
{
function run();
}
class student extends people implements irun
{
public function sayhello()
{
echo("good morning,".parent::getname());
}
public function run()
{
echo("两条腿跑");
}
}
$s=new student();
$s->setname("kym");
$s->sayhello();
$s->run();
?>
都没什么好说的,跟java一模一样。
4. 构造方法
一直忘了说构造方法,其实也就是一段同样的代码:
<?php
class person
{
private $name;
private $age;
public function person($name,$age)
{
$this->name=$name;
$this->age=$age;
}
public function sayhello()
{
echo("hello,my name is ".$this->name.".i'm ".$this->age);
}
}
$p=new person("kym",22);
$p->sayhello();
?>
我们在面试中也许经常会遇到一种变态的题型,就是若干个类之间的关系,然后构造函数呀什么的调来调去。但是,在php中就不会遇到这样的情况了,因为在php中并不支持构造函数链,也就是说,在你初始化子类的时候,他不会自动去调用父类的构造方法。
<?php
class person
{
private $name;
private $age;
public function person($name,$age)
{
$this->name=$name;
$this->age=$age;
}
public function sayhello()
{
echo("hello,my name is ".$this->name.".i'm ".$this->age);
}
}
class student extends person
{
private $score;
public function student($name,$age,$score)
{
$this->person($name,$age);
$this->score=$score;
}
public function introduce()
{
parent::sayhello();
echo(".in this exam,i got ".$this->score);
}
}
$s=new student("kym",22,120);
$s->introduce();
?>
5. 析构函数
析构函数和c#和c++中不同,在php中,析构函数的名称是__destructor()。
class student extends person
{
private $score;
public function student($name,$age,$score)
{
$this->person($name,$age);
$this->score=$score;
}
public function introduce()
{
parent::sayhello();
echo(".in this exam,i got ".$this->score);
}
function __destruct()
{
echo("我要被卸载了");
}
}
6. 多态
由于默认参数的存在,以及php的弱类型,使得编译时多态(也就是由于参数个数以及类型不同而造成的多态)无法实现,但是运行时多态在上文中已有提及。不再赘述。
1. 继承
我们继续上一节中的例子,在php中,继承和java是一样的,都使用extends关键字。
复制代码 代码如下:
class people
{
private $name;
public function getname()
{
return $this->name;
}
public function setname($name)
{
$this->name=$name;
}
}
class student extends people
{
private $grade;
public function sayhello()
{
echo("good morning,".parent::getname());
}
}
在这里,我们需要主要的还有我们访问父类在c# 中用base,在java中用super,但是在php中,我们用parent关键字。
如果我们要访问自身的方法,那么可以用this,也可以用self。
复制代码 代码如下:
class student extends people
{
public function getname()
{
return "kym";
}
private $grade;
public function sayhello()
{
echo("good morning,".self::getname());
//echo("good morning,".$this->getname());
}
}
2. 抽象类
提到继承,就不得不说抽象类。
复制代码 代码如下:
<?php
abstract class people
{
private $name;
public function getname()
{
return $this->name;
}
public function setname($name)
{
$this->name=$name;
}
abstract function sayhello();
}
class student extends people
{
public function sayhello()
{
echo("good morning,".parent::getname());
}
}
$s=new student();
$s->setname("kym");
$s->sayhello();
?>
3. 接口
接下来就是接口:
复制代码 代码如下:
<?php
abstract class people
{
private $name;
public function getname()
{
return $this->name;
}
public function setname($name)
{
$this->name=$name;
}
abstract function sayhello();
}
interface irun
{
function run();
}
class student extends people implements irun
{
public function sayhello()
{
echo("good morning,".parent::getname());
}
public function run()
{
echo("两条腿跑");
}
}
$s=new student();
$s->setname("kym");
$s->sayhello();
$s->run();
?>
都没什么好说的,跟java一模一样。
4. 构造方法
一直忘了说构造方法,其实也就是一段同样的代码:
复制代码 代码如下:
<?php
class person
{
private $name;
private $age;
public function person($name,$age)
{
$this->name=$name;
$this->age=$age;
}
public function sayhello()
{
echo("hello,my name is ".$this->name.".i'm ".$this->age);
}
}
$p=new person("kym",22);
$p->sayhello();
?>
我们在面试中也许经常会遇到一种变态的题型,就是若干个类之间的关系,然后构造函数呀什么的调来调去。但是,在php中就不会遇到这样的情况了,因为在php中并不支持构造函数链,也就是说,在你初始化子类的时候,他不会自动去调用父类的构造方法。
复制代码 代码如下:
<?php
class person
{
private $name;
private $age;
public function person($name,$age)
{
$this->name=$name;
$this->age=$age;
}
public function sayhello()
{
echo("hello,my name is ".$this->name.".i'm ".$this->age);
}
}
class student extends person
{
private $score;
public function student($name,$age,$score)
{
$this->person($name,$age);
$this->score=$score;
}
public function introduce()
{
parent::sayhello();
echo(".in this exam,i got ".$this->score);
}
}
$s=new student("kym",22,120);
$s->introduce();
?>
5. 析构函数
析构函数和c#和c++中不同,在php中,析构函数的名称是__destructor()。
复制代码 代码如下:
class student extends person
{
private $score;
public function student($name,$age,$score)
{
$this->person($name,$age);
$this->score=$score;
}
public function introduce()
{
parent::sayhello();
echo(".in this exam,i got ".$this->score);
}
function __destruct()
{
echo("我要被卸载了");
}
}
6. 多态
由于默认参数的存在,以及php的弱类型,使得编译时多态(也就是由于参数个数以及类型不同而造成的多态)无法实现,但是运行时多态在上文中已有提及。不再赘述。
推荐阅读
-
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
-
PHP学习记录之面向对象(Object-oriented programming,OOP)基础【类、对象、继承等】
-
PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】
-
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
-
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
-
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
-
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
-
PHP5 面向对象(学习记录)
-
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
-
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)