面向对象编程

问题

  • 对于每个人来说,都有姓名,性别,年龄…
  • 对于每辆车来说,都有车型,车牌,出厂商…
  • 那么问题来了,对于每个人,每辆车,我们都需要定义相似的变量,如何避免呢?
<html>
<body>
<?php
	$person1_name="name1";
	$person1_sex="woman";
	$person1_age=15;
	$person2_name="name2";
	$person2_sex="man";
	$person2_age=15;
	//...
?>
</body>
</html>

简单案例

  • 图解
    在这里插入图片描述
  • 引入新的数据类型----对象,来统一管理。
<html>
<body>
<?php
	class Person{
		//与C++不同的是:无":"符号
		public $name;
		public $sex;
		public $age;
	}
	//实例化一个人
	$person1=new Person();
	//注意:成员变量在使用时不加"$"符号
	$person1->name="name1";
	$person1->sex="woman";
	$person1->age=15;
		
	$person2=new Person();
	$person2->name="name2";
	$person2->sex="man";
	$person2->age=16;
	
	$personName="name1";
	if($person1->name==$personName){
		echo $person1->name." ".$person1->sex." ".$person1->age."<br/>";
	}
	$personName="name2";
	if($person2->name==$personName){
		echo $person2->name." ".$person2->sex." ".$person2->age;
	}	
?>
</body>
</html>

类和对象的区别和联系

  • 类是抽象的,概念的,代表一类事物
  • 对象是具体的,实际的,代表具体事物
  • 类是对象的模板,对象是类的实例

成员属性

  • 成员属性是某个事物的特性,可以是基本类型(integer,float,char,bool),也可以是复合类型(数组,对象)
	//Person有三个成员属性:name、sex、age
	class Person{
		public $name;
		public $sex;
		public $age;
	}

实例化

	$person=new Person();

访问成员属性

  • 基本语法:$对象名→属性名
	$person->name="name";
	$person->sex="woman";
	$person->age=15;

特别声明

  • 如果一个文件专门用于定义类,则命名规范为:类名.class.php
  • 给一个函数传递一个对象,实际上是传递一个地址。
  • 函数在默认下传递的是值,如果希望传递的是地址,用引用。
<html>
<body>
<?php
	function calc(&$val){
		$val*=2;
	}
	$val=10;
	echo "val=".$val."<br/>";
	calc($val);
	echo "val=".$val."<br/>";
?>
</body>
</html>
  • 给一个函数传递的是数组,则默认情况下是传值(拷贝一个新的数组),如果希望传递的是地址,用引用。
<html>
<body>
<?php
	function calc(&$val){
		for($i=0;$i<count($val);++$i){
			$val[$i]*=2;
		}
	}
	$val=array(10,20,30);
	print_r($val);
	echo "<br/>";
	calc($val);
	print_r($val);
?>
</body>
</html>

成员方法

  • 上面我们提到人类,有某些特性:姓名,性别,年龄…,但有时候我们希望人类可以有某些行为:告诉别人自己的姓名,修改自己的年龄…,此时就需要使用成员方法。
  • 成员方法的基本语法:
访问修饰符 function 函数名(参数列表){
	//函数体
	//return语句
}
  • 简单案例
<html>
<body>
<?php
	class Person{
		public function getName(){
			return $this->name;
		}
		public function changeAge($val){
			$this->age=$val;
		}
		public $name;
		public $sex;
		public $age;
	}
	
	$person=new Person();
	$person->name="name";
	$person->sex="woman";
	$person->age=15;
	
	echo $person->getName();
	echo "<br/>";
	$person->changeAge(16);
	echo $person->age;
	
?>
</body>
</html>
  • 综合实例:类和实现放在一起
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<form action="3.php" method="post">
<input type="radio" name="calc" value="value1" checked="checked">四则运算</input>
<br/>
<input type="text" name="first" value="0"/>
<select name="oper">
<option name="add" selected="selected">+</option>
<option name="dec">-</option>
<option name="multi">*</option>
</select>
<input type="text" name="second" value="0"/>
<input type="submit" name="clac" value="计算"/>
</form>
</body>
</html>
//3.php
<html>
<body>
<?php
	class Calc{
		public function add(){
			echo "num1+num2=".($this->num1+$this->num2);
		}
		public function dec(){
			echo "num1-num2=".($this->num1-$this->num2);
		}
		public function multi(){
			echo "num1*num2=".($this->num1*$this->num2);
		}
		public $num1;
		public $num2;
	}
	$select1=$_REQUEST['calc'];
	if($select1){
		$result=new Calc();
		$result->num1=$_REQUEST['first'];
		$result->num2=$_REQUEST['second'];
		$oper=$_REQUEST['oper'];
		switch($oper){
			case '+':
				$result->add();
				break;
			case '-':
				$result->dec();	
				break;
			case '*':
				$result->multi();
				break;
		}
	}
?>
<br/>
<a href="2.php">主界面</a>
</body>
</html>

在这里插入图片描述

  • 综合案例:类和实现分离
<html>
<body>
<?php
	//3.php
	//引入类:Calc.class.php
	require_once 'Calc.class.php';
	$select1=$_REQUEST['calc'];
	if($select1){
		$result=new Calc();
		$result->num1=$_REQUEST['first'];
		$result->num2=$_REQUEST['second'];
		$oper=$_REQUEST['oper'];
		switch($oper){
			case '+':
				$result->add();
				break;
			case '-':
				$result->dec();	
				break;
			case '*':
				$result->multi();
				break;
		}
	}
?>
<br/>
<a href="2.php">主界面</a>
</body>
</html>
<?php
	class Calc{
		public function add(){
			echo "num1+num2=".($this->num1+$this->num2);
		}
		public function dec(){
			echo "num1-num2=".($this->num1-$this->num2);
		}
		public function multi(){
			echo "num1*num2=".($this->num1*$this->num2);
		}
		public $num1;
		public $num2;
	}
?>
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页