php的类和对象方法Circle,php面向对象编程系列(一)

oriented object

programming(oop):面向对象编程

1、php面向对象编程------类与对象

2、php面向对象编程------构造方法

php面向对象编程

学习目标:

1、 初步掌握php中的类与对象;

2、 各种变量在内存中存在形式分析;

3、 什么是成员属性和成员方法;

4、 掌握构造方法/析构的使用;

从类到对象,目前有几种说法:

1、创建一个对象;2、实例化一个对象;3、把类实例化; 这三种说法都是一样的。

类与对象的区别和联系:

① 类是抽象的,概念的,代表一类事物,比如人类、猫类。。。

② 对象是具体的,实际的,代表一个具体的事物;

③ 类是对象的模板,对象是类的一个个体实例。

定义类

class 类名{

成员属性(变量);

}

u 成员属性的说明

1、 成员属性是从某个事物提取出来的,它可以是基本数据类型(整数、小数、字符),也可以是复合数据类型(数组、对象)。

创建对象(两种方法)

① $对象名=new 类名();

② $对象名=new 类名;

访问(使用)成员属性(其成员属性名是public)

语法:$对象名->属性名;

//创建一个类

class cat{

public $name;

public $age;

}

//创建对象

$cat1=new cat;

//给某个对象赋值

$cat1->name=”小明”;

//访问某个对象的某个属性 $对象名->属性名

echo $cat1->name;

如果一个文件,专门用于定义了类,则取名的规范是

类名.class.php

对象在内存中的存在形式:

案例1:

//定义一个人类

class person{

public $name;

publid $age;

}

$a=new person();

$a->name=”小明”;

$a->age=20;

//把a变量(对象)赋给$b;

$b=$a;

echo $a->name.”

”;

echo $b->name.”

”;

输出:

小明

小明

内存图:

a4c26d1e5885305701be709a3d33442f.png

如果给一个函数传递的是一个对象,实际上传递的是一个地址!!!

案例2:

$a=78;

$b=$a;

$b=&$a;

$b=$b+8;

echo $a. “||”.$b;

输出:78||86

2$a=78;

//$b=$a;

$b=&$a;

$b=$b+8;

echo $a."||".$b;

a4c26d1e5885305701be709a3d33442f.png

输出:86||86

class person{

public $name;

public $age;

}

$p1=new person();

$p1->name="李冰冰";

$p1->age=33;

//函数接收对象的时候,是传入值还是地址?!!!

function test1($p){

$p->name="小明";

}

test1($p1);

echo $p1->name;

内存图:

a4c26d1e5885305701be709a3d33442f.png

如果给函数传递的是基本数据类型(整数、小数、布尔、字符串),究竟传递的是地址还是值?

**在默认情况下传递的是值,如果你希望传入的是地址则 function test(&$变量名){}

在php中,如果给一个函数传递的是数组,则默认情况下是传值(相当于拷贝了新的数组),如果希望传入地址,也应当:&$数组名

//给一个函数传递基本数据类型

$a=90;

$b=90.8;

$c=true;

$d="hello";

function test1($a,$b,$c,$d){------à(&

$a,&$b,&$c,&$d)

$a=78;

$b=89.7;

$c=false;

$d="world";

}

//调用函数

test1($a,$b,$c,$d);

echo $a."||".$b."||".$c."||".$d;

结果:90||90.8||1||hello---à(78||89.7||||world)

l 成员方法:

函数和成员方法的关系:当我们把一个函数写到某个类中,则该函数可以称为成员方法。

案例:

① 添加speak成员方法输出:我是一个好人;

② 添加jisuan成员方法可以计算1+2+……+1000的结果;

③ 修改jisuan成员方法,该方法可以接收一个数n,计算1+….+n的结果;

④ 添加add成员方法,可以计算两个数之和;

成员方法的基本语法:

访问修饰符号(暂时是public) function 函数名(参数列表){

//函数体;

//return;(可选)

}

参数可以是多个并且可以是任意类型:整数,小数,对象,数组等;

案例:

class person{

public $name;

public $age;

//添加一个speak成员方法

public function speak(){

echo "我是一个好人!";

}

//添加一个count1成员方法

public function count1(){

$res=0;

for($i=1;$i<2000;$i++){

$res+=$i;

}

//return返回到什么地方?谁调用返回给谁

return $res;

}

//修改count成员方法

public function count2($n){

$res=0;

for($i=1;$i

$res+=$i;

}

return $res;

}

//添加一个add成员方法,计算两数之和(接收2个参数)

public function add($num1,$num2){

return $num1+$num2;

}

}

//如何使用函数?

//创建一个人

$p1=new person();

//通过对象去访问,调用成员方法

//这里强调,调用成员方法和调用普通函数的机制,仍然不变

//for($i=0;$i<20;$i++){

$p1->speak();

//}

//计算1-2000的和

$res=$p1->count1();

echo "计算结果是:".$res;

//修改count成员方法,计算1---n的和,接收一个数

echo "计算结果是=".$p1->count2(1000);

//接收2个参数

echo "两数之和是:".$p1->add(100,250);

成员方法细节:

在实际开发中,应该这样用,单独写一个类文件,要用的使用引入。

有一个person.class.php的类文件;要用时:

require_once

‘person.class.php’; ///引入文件

$p1->new

person(); ///创建一个对象

调用方法

① 参数是数组类型();

案例:

class person{

public $name;

public $age;

//参数是数组类型的成员方法

public function findmax($arr){

$maxval=$arr[0];

$maxindex=0;

for($i=1;$i

if($maxval

$maxval=$arr[$i];

$maxindex=$i;

}

}

return $maxval;

}

$p1=new person();

$myarr=array(50,45,89,12,-20,900,78);

echo "

最大数是:".$p1->findmax($myarr);

输出:最大数是:900

② 方法可以没有返回值;

案例1:编写一个程序,用面向对象的方式,从网页输入一个整数打印出对应的金字塔。

创建三个文件如:myinputview.php(界面),print.php(接收myinputview.php提交的数据),xxx.class.php(定义类)。

a4c26d1e5885305701be709a3d33442f.png

先设计类(定属性/成员方法);

然后根据类创建对象。

myinputview.php文件:

请输入层数:

xxx.class.php文件

class xxx{

//接收一个数据,并打印出对应的金字塔

public function printstar($n){

//使用for

for($i=1;$i<=$n;$i++){

//先打印空格

for($k=1;$k<=$n-$i;$k++){

echo " ";

}

//打印*个数

for($j=1;$j<=($i-1)*2+1;$j++){

echo "*";

}

echo "

";

}

}

}

print.php文件

//引入xxx.class.php文件

require_once 'xxx.class.php';

//接收myinputview提交的数据并处理

$layer=$_request['layer'];

//调用对象

//创建

$xxx1=new xxx();

$xxx1->printstar($layer);

案例2

设计一个计算机类:

属性:品牌 颜色 cpu型号 内存容量 硬盘大小 价格 工作状态

方法:打开 关闭 休眠

创建一个计算机对象,调用打开、关闭、休眠方法

computer.class.php文件

//属性:品牌 颜色 cpu型号 内存容量 硬盘大小 价格 工作状态

//方法:打开 关闭 休眠

//创建一个计算机对象,调用打开、关闭、休眠方法

class computer{

//属性

public $brand;

public $color;

public $cpu;

public $memory;

public $hardisksize;

public $price;

public $status;

//方法

public function open(){

echo "打开......";

}

public function close(){

echo "关闭......";

}

public function computersleep(){

echo "休眠中......";

}

}

exercise.php文件

//使用computer类

require_once 'computer.class.php';

//创建计算机对象

$computer1=new computer();

//调用方法

$computer1->open();

$computer1->close();

$computer1->computersleep();

练习:

一、用面向对象的方法实现:爱玩游戏的猪!

1、 输出自己的名字、体重、年龄、颜色;

2、 可以增加自己的体重/减轻自己的体重;

3、 可以打印金字塔(层数随意);

4、 可以打印空心金字塔(层数随意);

5、 可以打印菱形;

6、 继续改进,可以打印空心菱形;

二、编写一个cat类,要求如下:

该猫可以做四则运算,也可以进行面积计算

a4c26d1e5885305701be709a3d33442f.png

分析 :有几个php文件?

显示界面:catview.php;

② 猫工作的文件 :catwork.php ,猫计算(接收数据)

引入猫类class文件,require_once ‘cat.class.php’;

创建一个猫对象:$cat1=new

cat();----要写在外面jisuan()的外面,否则在别的function用不了!

$doing=$_request[‘doing’];------接收隐藏域的name值

if($diong==jisuan){

接收数据:$num1=$_request[‘num1’];

接收数据:$num2=$_request[‘num3’];

接收数据:$oper=$_request[‘oper’];

echo

“计算结果是=”.$cat1->jisuan($num1,$num2,$oper)

}else if($doing==area){

$radius=$_request[‘radius’];这里是计算圆形的面积代码

}else{

接收长和宽计------算矩形的面积

}

可以写个超链接 :返回主界面

为了区分不同的请求,可以使用隐藏域(hidden),这是经常用到的(即如何区分猫是进行四则运算还是进行面积计算)

② 猫类文件:cat.class.php

定义一个猫类 :class cat{};

猫可以做计算

成员方法:

function circlearea($)

function

jisuan($num1,$num2,$oper){}

2、进一步形成如图的效果:

a4c26d1e5885305701be709a3d33442f.png

这个要用到js技术根据不同的需求显示不同的界面

在radio里面分别设置onclick点击事件name=”seltype(‘jishuan’)”;

name=”seltype(‘area’)”

在各个table里可以设置 style=“display:none/block”,在js里设置function

seltype(val)函数,判断条件,当val=jisuan时table1中的display值为block,table2中display值为none,依次进行判断,访问display的值的方法:table1.style.display=none/block;

实现点击不同的radio时不同block的切换!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验内容: 一、定义一个名为Circle的圆类,位于shape包中。要求如下: (1) 该类需要描述圆在二维坐标系中的位置,圆心的横、纵坐标值均取整数;描述圆的半径,取双精度类型。 (2) 无参构造方法将圆心坐标设为坐标圆点,半径设为1.0;有参构造方法需要根据参数值设置圆心坐标和半径值。 (3) 提供一个计算圆面积的方法double getArea()。 (4) 提供一个判断当前圆对象与参数圆对象是否相交的方法(相交方式见下图): boolean isIntersected(Circle another) (5) 提供一个判断当前圆对象是否包含参数圆对象的方法(包含方式见下图): boolean contains(Circle another) (6) 提供一个判断当前圆对象与参数圆对象的大小关系的方法(判断依据是半径,半径之差的绝对值小于0.0001认为相等;返回负数表示当前圆对象小,0表示相等,正数表示当前圆对象) int compareTo(Circle another) (7) 提供返回当前圆的字符串的方法,格式为:[Circle(x,y)-raduis] String toString() 二、定义一个包含main方法的类TestCircle,位于shape包中。要求如下: (1) main方法中调用以下方法。 (2) 编写静态方法createArray,生成位置和大小均随机的10个圆对象,置于数组中。 (3) 编写静态方法sort对这10个圆对象进行升序排序,并输出。 (4) 编写静态方法computeArea计算这10个圆中互不相交和包含的圆的面积之和。 提交要求:打包为可以执行的JAR文档,其中要包含源程序文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值