前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php基础教程 第十一步 面向对象

php基础教程 第十一步 面向对象

作者头像
1_bit
发布2020-10-23 14:41:09
9930
发布2020-10-23 14:41:09
举报
文章被收录于专栏:我的知识小屋我的知识小屋

面相对象

面向对象程序设计简称OOP(Object-oriented programming)。是一种类型的抽象,或者说是一种类型以编码的方式进行描述。概念上理解并不能直观的说明问题,以下将会有示例为读者直观的感受面向对象。

类代表一个类别,例如人、车子、动物、液体都属于一个类,在php中我们用class表示一个类。 对象指这一个类的实例化,例如人这一个类,有一个具体,如小明是一个人类,小明就是这一个类别的具体;动物也是一个类,对象可以为猴子,猩猩,马等;液体也是一个类,水属于液体这一个类别,牛奶也属于液体这一个类别。 成员函数一般指这一个类中的一些属性,例如人这个类别,有年龄、身高、性别、头发等这一些属性;液体有颜色、密度等属性。 子类指一个父类的派生,也就是人这一个类属于动物,动物这一个类别就是人类的父类,人类这一个类别指动物的子类。 父类是一个类的父亲,以上以说明。 类方法可以指类里面的一些接口动作,例如人可以吃饭、人可以走路等。

一个最为简单的面向对象示例

接下来看一下一个简单的类定义:

代码语言:javascript
复制
<?php
class Human {
  public $sex;
  public $hair;
}
?>

以上使用class 这个关键字定义了一个Human类,Human是一个类的名称,就跟函数名称一样可以自己设置,Human的意思为人,这里定义的是一个人的类别。人的属性有名字和年龄,在类名后的花括号中,编写了 public sex; 与 public hair;方法,public 是对变量以及方法的修饰,表示这个变量或者方法是公开的。就像你的性别,外人可以从外貌上分表你是男是女,这些属性是公开的,可以使用public进行修饰。除了public方法可以修饰公开的属性或者方法外,还可以使用private 修饰一些私有的方法,例如你的胃消化的方法,只有你自己可以调用,外人是使用不了,这个方法可以使用private进行修饰(当然,这个比喻并不是很好的说明这个问题,接下来将会用示例进行说明)。 以下示例将Human这个类进行实例化:

代码语言:javascript
复制
$Xiaoming=new Human();

这个时候只是实例化了这个类,$Xiaoming 就是Human这个类的对象。我们可以为这个对象设置值。设置值需要添加一些方法:

代码语言:javascript
复制
<?php
class Human {
  public $sex;
  public $hair;
  
  public function set_Sex($val){
	  $this->sex=$val;
  }
  public function set_Hair($val){
	  $this->hair=$val;
  }
}

$Xiaoming=new Human();
?>

以上代码中 public function set_Sex 定义了一个函数,函数名为 set_Sex,使用了public进行修饰,表示这个函数可以直接调用;这个函数接收一个参数,参数名为 val。在set_Sex 函数的花括号中,代码为 this->sex=val;,this为当前对象,指当前类,->表示一个指向,this->sex就为当前类中的sex成员属性(变量),赋值为传入的

代码语言:javascript
复制
<?php
class Human {
  public $sex;
  public $hair;
  
  public function set_Sex($val){
	  $this->sex=$val;
  }
  public function set_Hair($val){
	  $this->hair=$val;
  }
}

$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');
?>

以上代码中使用对象 Xiaoming 用箭头-> 运算符调用 set_Sex 函数,并且传入了一个值为 nan(男女的拼音):

代码语言:javascript
复制
<?php
class Human {
  public $sex;
  public $hair;
  
  public function set_Sex($val){
	  $this->sex=$val;
  }
  public function set_Hair($val){
	  $this->hair=$val;
  }
  
  public function get_Sex(){
	  return $this->sex;
  }
  
  public function get_Hair(){
	  return $this->hair;
  }
}

$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');

echo $Xiaoming->get_Sex();
echo ' ';
echo $Xiaoming->get_Hair();
?>

以上代码中,使用 get_Sex() 方法获取性别,使用 get_Hair 获取是否有头发。在函数内使用return 返回了 this->sex 的值。

private

我们可以在类中修改 set_Sex 的修饰public 为 private,使用 private 后外部调用将会报错:

代码语言:javascript
复制
<?php
class Human {
  public $sex;
  public $hair;
  
  private function set_Sex($val){
	  $this->sex=$val;
  }
  public function set_Hair($val){
	  $this->hair=$val;
  }
  
  public function get_Sex(){
	  return $this->sex;
  }
  
  public function get_Hair(){
	  return $this->hair;
  }
}

$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');

echo $Xiaoming->get_Sex();
echo ' ';
echo $Xiaoming->get_Hair();
?>

运行报错如下:

在这里插入图片描述
在这里插入图片描述

但是在类内部中是可以调用的,在以下示例中,新建了一个 printInfo 函数,使用private 进行修饰,在外部调用不了,但是在内部还是可以调用的:修改一下查看示例:

代码语言:javascript
复制
<?php
class Human {
  public $sex;
  public $hair;
  
  private function printInfo($val){
	  echo '传入的值是 '.$val.'<br/>';
  }
  public function set_Sex($val){
	  $this->printInfo($val);
	  $this->sex=$val;
  }
  public function set_Hair($val){
	  $this->hair=$val;
  }
  
  public function get_Sex(){
	  return $this->sex;
  }
  
  public function get_Hair(){
	  return $this->hair;
  }
}

$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');

echo $Xiaoming->get_Sex();
echo ' ';
echo $Xiaoming->get_Hair();
?>

在 printInfo 函数中,传入了一个 val 参数,随后输出了这个参数。 printInfo 方法调用在 set_Sex 方法中,传入了 val,用 printInfo 作为提示。 结果如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面相对象
  • 一个最为简单的面向对象示例
  • private
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档