传智播客 PHP程序员笔记第一天

时间:2019-05-12 21:41:50下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《传智播客 PHP程序员笔记第一天》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《传智播客 PHP程序员笔记第一天》。

第一篇:传智播客 PHP程序员笔记第一天

做网站 Web程序。

需要制作一台可以在网络上被别人访问到的机器。

安装了浏览器的计算机:

browser端 能够提供网络资源的计算机:(网站在这台计算机上),能够提供某种服务。Server端。

B/S是什么意思? 浏览器/服务器的架构:

请求:浏览器端向服务器端发送数据。Request 响应:服务器向浏览器端发送数据。回应,Response

什么样的计算机叫做服务器端? 安装了服务器软件的计算机。

Web服务器软件:iis,nginx,apache。

其中apache还是目前与php配合使用最多的服务器软件:

安装apache这个软件,使jsj成为一台web服务器。

http:// Apache的默认的文档目录 apache的安装目录下/htdocs/

什么是静态网站,动态网站?

静态,网站上所有的内容,都是由静态页面提供的。

动态:网站的内容,是来源于某个数据源(数据库,互联网),而,在需要展示某些数据时,通过某种语言,将数据从数据源内提取,然后再展示到页面上。

如果需要做动态网站,需要

1,数据源(数据库)mysql数据库

2,某种语言(用于提取和展示数据之用)PHP

Amp开发:

利用apache作为web服务器,使别人可以访问到我们的网站 利用mysql作为数据源,可以保存动态网站所需要的数据 利用php来获得某个操作所需要的数据。

小测试: 输出1-100 编写php文件:

访问这个php文件:

发现,可以访问到,但是不能解析。

Apache只有提供被访问的功能,而不能提供解析php代码的功能。

因此需要安装php程序,提供解析php代码的功能:

安装PHP:

所有的请求都是web服务器来接收的(apache),但是其中某些资源需要php来处理。通常的处理方式,是将php作为apache内部的一个模块来管理的。

将php安装成apache模块:

使用一个apache的指令,loadModule来完成:

解压php的安装包:

不需要安装可以直接执行 将php软件复制到相应的目录: E:/amp/php

由于不需要安装,目录内的可执行文件直接可以使用:

在php目录内,有个文件,就是php为apache提供的apache模块:

需要使用apache的LoadModule载入这个模块即可:

需要在apache的配置文件内,使用上面的LoadModule指令: apache的配置文件在 apache的安装目录/Conf/httpd.conf

增加如下指令即可:

修改配置文件后,需要重启动apache服务才可以:

配置apache,告知apache,哪样的前请求需要调用php来解析,而哪些不需要: 通过请求的资源的后缀名

使用apache的FilesMatch指令来完成: 当匹配到php后缀时,调用php来处理: Apache的配置文件内:

请求php文件时,php代码可以执行:

大家可以使用phpinfo()函数来测试以下,当前的php运行的环境:

安装php后,需要配置一些最基本的配置项: 修改php的配置文件: Php的安装目录/php.ini

根据需要,将相应的更改成php.ini即可:

由于php作为apache一个模块,因此需要告知apache,在哪里才能找到php的配置文件。利用apache的指令PhpIniDir来完成:

修改配置文件,达到某些目的:

1,时区

2, php扩展文件的目录。Php的很多功能,并不是内置到php的软件内的。在需要使用某个功能时,再载入即可。这个扩展的功能文件是被保存到某个目录内的,称之为php的扩展目录: Extension_dir:

修改完了php的配置,也需要重启apache才能生效

如果我们的php需要操作数据的话,需要利用数据软件了。安装Mysql。

1,安装 2,配置

配置mysql的安装目录,和mysql数据的保存目录:

安装完成时,勾选运行配置向导,完成配置的过程:

配置字符集:

简单介绍Mysql: 数据库服务器:

属于server端。因此,需要等待某个程序请求他才可以运行。

能够对mysql数据库服务器发出请求的我们称之为mysql客户端。

C/S Client客户端

Server服务器

在安装完mysql后,其实安装了2个软件1,mysql的服务器端,2,mysql的客户端。

我们需要使用php来操作mysql。

其实 在php操作mysql的过程中,php就变成了 mysql的客户端。

Php能够作为mysql的客户端,使用php的php_mysql.dll这个扩展完成,而且,这个扩展不是默认开启的。

开启相应的mysql的操作扩展,利用php的指令extension来完成。Php.ini:

B/S C/S

1,服务器在监听(运行),提供某个服务

2,浏览器或者客户端,对服务器发出请求。在发送请求时,请求的数据一定要按照某种数据格式才可以。数据格式在网络数据传输时称之为网络协议。3,服务器接收到请求后,会根据请求数据,进行相应的操作。4,将处理好的结果返回给浏览器(客户端),回应。Response 5,浏览器端(客户端)对回应的数据进行展示输出,b/s 都是用浏览器发出请求的。

http https c/s架构,都是采用某个服务专用的客户端发出的请求。

Bs架构通常,任何两次请求回应周期是没有任何联系的。在发出请求时,都需要先建连接。

Cs通常,在连接一次之后,通常就会保持住这个连接,后续的操作,就不需要再次建立连接了。

PHP与apache联系:

1,php作为apache的模块而存在。loadModule 2,web服务器与php之间通过 CGI方式产生联系。CGI(通用网关接口),IIS+PHP。现在CGI被fastCGI。Nginx+PHP

apache的虚拟主机:

通常一个web服务器,代理的是一个网站。

有时我们需要利用一个web服务器,管理多个站点。不同的站点拥有独立的域名。

通过配置apache服务器,达到,访问

Test.kang.com时,看到的是test目录的内容。Shop.kang.com时,看到的是shop目录的内容

Apache的基于域名的虚拟主机技术:

主机:一个网站,就是一些php文件的集合,一个保存php文件的目录 域名:指向某个网站的名称。

通过修改apache配置文件达到效果:

Apache/comf/httpd.conf 原则上在这个配置文件内写虚拟主机的配置就可以了。但是通常我们都是将虚拟主机的配置写到某个单独的配置文件内,然后将这个虚拟主机配置文件再载入到apache的这个httpd.conf配置文件内。引入的操作:

虚拟主机的专门的配置文件:

编辑这个虚拟主机文件,增加虚拟主机:

在配置文件内,每一个指令段就配置了一个虚拟主机。增加一个虚拟主机,就是:增加一个VirualHost指令段即可:

域名和目录是一个虚拟虚拟主机最基本的必备元素。

完成以上的操作,apache配置已经完成,apache上已经存在两个虚拟主机了:

在配置了虚拟主机之后,我们对web服务器的默认访问(没有使用配置的虚拟主机域名的访问),都会访问到默认的主机上。

默认的主机:

1,在配置了虚拟主机后:默认的主机就是 第一个配置的虚拟主机 2,在没有配置虚拟主机时,是htdocs目录。

那么怎么才能在使用虚拟主机的前提下,让localhost访问到原来的htdocs?

如何能够通过在浏览器上输入相应的虚拟主机域名访问到我们的虚拟主机呢? 在浏览器端,需要通过相应的域名,解析成目标服务器的ip地址才可以。

可以通过过浏览器端操作系统上自带的 域名解析文件完成。Hosts

配置虚拟主机时,常用的配置:

目录的权限的配置

利用apache的directory指令段完成配置 看 httpd.conf的配置:

目录级别的配置,对当前目录,及其后代目录有效果。

如果在apache的配置文件内,没有对某个目录进行配置,则采用默认的目录配置

可以通过修改默认的配置达到目的,但是通常是针对目录进行单独配置: 增加一个 Directory指令段:

为了将目录与虚拟主机联系起来,通常在VirtualHost内,使用Directory指令 Conf/extra/httpd-vhosts.conf

直接访问目录的配置:

在访问目录时,先检测当前目录是否配置了目录索引页,如果配置了索引页,则展示索引页的内容。目录的索引页使用apache的指令 directoryIndex完成配置。这个指令是可以写到directory段内。

如果没有配置目录索引页:则需要将目录的的内容以列表的形式显示出来,但是是通过配置apache的指令options加以配置,是否可以显示目录的索引列表。

可以在配置 options时 增加上允许符号连接的配置:

Apache的配置文件系统:

Apache程序,只会在apache服务器启动时,读取apache配置文件的内容,称之为apache主配置文件。

一旦配置文件的语法出错,就会导致apache服务器启动失败,提示:

Apache提供一个apache的配置文件检查的功能:

也可以通过 cmd,命令行运行:

Apache还有一个配置文件,称之为apache的分布式配置文件,apache允许在某个目录内部,使用独立的配置文件,来配置当前目录及其后代目录的中的一些设置。但是此时配置文件名称,就不是httpd.conf了 而是.htaccess

在这个.htaccess配置文件中配置的内容,只能是目录级别的配置。

但是默认情况下,分布式配置文件是不可以使用的。可以通过在主配置文件中使用apache的 Allowoverride指令加以配置。由于分布式配置文件是配置目录的,因此 allowoverride也是需要写到Directory段。

分布式与主配置文件的区别:

1,主配置文件需要保存到Conf目录中,而分布式需要保存到所有需要配置的目录中

2,主配置文件只要在apache启动时,才读取,而分布式配置文件,在apache访问到某个目录时都会读取一次。

作业

1,每个人配置一个虚拟主机: 域名是 test.ip.com Test.100.com

2,在test.ip.com上增加一个表单页面 Welcome.html页面

最好在表单提交时,验证姓名不能为空,为空给出提示,不能提交。

分析上面的例子:

发生了几次请求和回应的过程。

第二篇:传智播客PHP教程.zend.framework视频教程简介

[视频简介:]

本教程贯穿了两个软件公司常用的两个项目,数据采集系统和购物车,共分20讲,全面细致的讲解了如何正确的使用zend framework框架到网站开发中,zend framework 是官方推荐的PHP mvc框架,功能强大,后劲十足,也正是它太强大了,所以很多PHP程序员对它望而生畏,不敢去学习掌握它,真的有那么难吗? 呵呵,看完本教程你就会发现,喔!不过如此。

韩老师这套zf视频教程是目前市面上讲解最全面的zend framework视频教程,从本质上深入浅出的分析了zend framework运行原理。

韩顺平老师从事多年的软件开发和培训教学,非常清楚那些容易使新手困惑的问题,在学习过程中会碰到的拦路虎,韩老师结合了多年实际开发与教学经验,收集了众多学员在学习中常提到的问题,对平时讲课的内容进行了精心整理。读者从本视频中不仅可以学习到zend framework框架本身方面的知识,还能学到了许多编程思想和实际操作手法,仿佛韩老师在你面前进行现场演示一样。本视频不仅全面的介绍了zend framework本身,最重要还交会读者去掌握编程思想,找到编程感觉,而不是死记硬背语言本身,视频中涉及到的应用问题分析,远远超了一个PHP程序员在学习和应用zend framework过程中所有可能碰到的问题。

本视频不仅讲概念,讲怎么做,还告诉读者为什么;不仅讲操作技能,还贯穿一些系统的理论,这样读者才不至于不明不白,或是似乎明白,但不知道具体该怎么干。本视频一步步引导读者深入,使读者轻松愉快、兴趣盎然、水到渠成、潜移默化地掌握PHP编程及许多其他的软件开发思想。

[声明:]

本课程是由传智播客韩顺平老师录制,任何人不能用此教程牟利,违者必究。但是:在不收取其他人费用的前提下,您可以自由的分发此视频教程。

[联系我们:]

在学习过程中如果遇到问题可以通过以下联系方式与我们取得联系,另外还有更多传智播客PHP内部视频见:

网址:http://php.itcast.cn 或者 http://

电话:010-51552111E-mail:hsp@itcast.cn

第三篇:传智播客PHP教学之PHP基本语法

PHP基本语法

36讲 PHP基本语法介绍 PHP数据类型介绍.............................................................................2 37讲 整型细节说明........................................................................................................................3 38讲 布尔细节 浮点数细节 字符串细节 算术运算符①..........................................................4 39讲 算术运算符② 比较运算符 逻辑运算符............................................................................5 40讲 三元运算符 类型运算符 运算符优先级............................................................................9 41讲 顺序控制 分支控制(if ifelse switch)程序流程图............................................................10 42讲 循环控制①(for)..................................................................................................................15 43讲 循环控制②(while dowhile)打印金字塔案例..................................................................16 45讲 break语句 continue语句 常量.........................................................................................19 46讲 函数基本概念 函数快速入门............................................................................................22 47讲 函数使用 函数调用初步理解............................................................................................25 48讲 函数调用深入理解 函数使用注意事项①........................................................................26 49讲 函数使用注意事项② 函数作业布置................................................................................29 50讲 函数再回顾 自定义函数....................................................................................................30 51讲 位运算①.............................................................................................................................31 52讲 位运算②.............................................................................................................................32 53讲 数组介绍 数组的创建 数组的遍历..................................................................................34 54讲 数组的引用 数组使用细节①............................................................................................36 55讲 数组使用细节② 数组运算符 数组作业评讲① 数组小结............................................38 56讲 排序介绍 冒泡排序............................................................................................................40 57讲 选择排序 插入排序 快速排序..........................................................................................42 58讲 顺序查找 二分查找............................................................................................................44 59讲 多维数组 数组作业评讲②................................................................................................46

36讲 PHP基本语法介绍 PHP数据类型介绍

更新时间:2012年11月02日16时44分 来源: 1.1

单行注释 // #

php的基本语法加强 Parse : 解析 error : 错误 syntax : 语法

php 可以和 html 混合使用 ②

php 的变量的定义使用

//php中,定义一个变量要以$符号打头

$a=890;//我定义了一个变量, 该变量名叫 $a , 然后给该变量赋了一个值890 ③

php 的变量的数据类型,是变化的,php变量的数据类型是由运行时的上下文决定 ④

php区分大小写 $i = 89;$I=90;$abc=90;$Abc=900;

php 的变量的名称,应当以字母或者下划线开头,不要用数字开头,也不要用特殊字符开头.$3abc=89;

php 数据类型有哪些? 有三大类

1.基本数据类型 1.1 整型 1.2 小数型(浮动数)包含单精度和双精度 1.3 布尔类型(表示真,和 假)1.4 字符串 2.复合数据类型 2.1 数组(array)2.2 对象(object)3.特殊数据类型 3.1 null

3.2 资源类型(resource)

37讲 整型细节说明

更新时间:2012年11月04日19时18分 来源: 基本数据类型的入门案例: ■ 整型

整数类型可以表示一个整数,比如:

$ts=1;$ts=-12;■ 布尔类型

布尔型可以表示真或者假,比如:

$ts=true;$ts=false;■ 小数类型

小数类型可以表示一个小数(float,double)

$ts=1.12 $ts=3.1415926 ■ 字符串类型

字符串类型可以表示一个字符串

$ts=“我是一个好人 hello” 基本概念: 何为定义一个变量

$a=90;//相当于我们定义了一个变量 $a,并赋值90 ?>

什么叫给变量赋值

$a=78;

$a=8;//表示用新的值替代 78

$a=”hello”;//表示$a 的类型变化.?>

整型的细节讨论

①在php中一个整型数据可以用十进制,也可以用八进制和十六进制 比如 :

$a = 0123;// 八进制数(是以0开头)$a = 0x1A;// 十六进制数

0123 = 3*8的0次方 + 2*8的1次方+ 1*8的二次方 =3*1+2*8+1*64=83

0x1A= A*16的0次方 +1*16的一次方=10+16=26

$a=123=3*10的0次方+2*10的1此方+1*10的二次方=3+20+100=123 ② php的整数都是有符号数.通过该图,我们可以看出,php的整数的二进制的最高位表示符号 ③ 通过 PHP_INT_SIZE

可以显示我们自己的机器,一个整数用几个字节表示 echo PHP_INT_SIZE;

通过PHP_INT_MAX 可以显示int 最大的数有多少 echo PHP_INT_MAX;

请问? 为什么 PHP_INT_MAX是 2147483647 我们一起推一下

请问? php 的int 型,负数最大表示多少? 负数和正数一样大 2的31次方减一

④ 如果一个整数的范围超过了最大范围,则自动变成float

38讲 布尔细节 浮点数细节 字符串细节 算术运算符①

更新时间:2012年11月06日13时53分 来源: 学生的问题?

$a=2;问在内存中 2是怎样存在的

00000000 00000000 00000000 00000010-> 0*2的0次方+1*2的一次方+..0=0+2=2 $a=-2 问在内存中形式

布尔类型

简单的说 布尔类型就两个值 true, 一个false;举例: //布尔类型 $a=true;$b=false;布尔值 FALSE 自身 整型值 0(零)浮点型值 0.0(零)空 字符串, 以及 字符串“0” 不包括任何元素的数组

不包括任何成员变量的对象(仅PHP 4.0 适用)特殊类型 NULL(包括尚未设定的变量)

$conn=mysql_connect(“localhost”,”root”,”root”);if($conn){

echo „ok‟;}else{

echo „没有ok‟;}

浮点数的细节

1.浮点数(也叫双精度数或实数)

2.浮点数的字长和平台相关,通常最大值是 1.8e308 并具有 14 位十进制数字的精度(这个限制很重要)☞ 精度要从左边开始的第一个非0的数字计算.字符串的细节 $a=”hello”;

请问 $a 占用了多个是字节 5个字节 一个字符串类型可以表示多大的串?

①理论上,我们对字符串大小没有限制,即只有不超过内存就可.②我们定义字符串的时候,可以用单引号,也可以使用双引号 区别如下: $i=90;

$user1=“hello$i”;

$user2='hello$i';

echo '
user1='.$user1;

echo '
user2='.$user2;

从上面案例我们看出, 当一个变量包含在 “”号中时,会输出它的值,而包含在‟‟ 中是输出其字符本身.案例2

如果字符串是包围在单引号(„)中, 除了来处理 ” 时,会输出 ” 外,其它规则都一样

php数据类型的自动转换

php的表达式

所谓表达式,就是任何有值的东西.$a=90+89;

php的算术运算符 +、-、*、/、%

39讲 算术运算符② 比较运算符 逻辑运算符

php的算术运算符

更新时间:2012年11月08日17时42分 来源: +、-、*、/、% $a=90;

$b=7;

if($a%$b==0){

echo '能整除';

}else{

echo '不能整除!';

}

++ 和 – 快速入门: $a=90;

$a++;//等价于 $a=$a+1;

echo $a;

$b=89;

$b--;//等价于$b=$b-1;

echo '
'.$b;

细节 我们的++ 和 – 分为前++ 后 ++ ,--也分为 前--$a=56;$b=$a++;echo $b;echo $a;对上面代码的分析如下: $a=56;

//$b=$a++;//等价于 $b=$a;$a=$a+1;

$b=++$a;//等价于 $a=$a+1;$b=$a;

echo $b.“||”;//-->$b 57

echo $a;//-->$a 57

左加 += 左减-=

左乘 *= 左除 /= 左取模 %= $a=90;

$a-=90;//$a=$a-90;echo $a;

比较运算符

案例: $a=2;$b=2.0

//只有值相等就为true if($a= =$b){

echo „$a==$b‟;}

//全等,要求$a 和 $b 值和类型要相等 if($a= = =$b){ }

对!=!= = 说明 //只有值不相等,则为true

if($a!=$b){

echo '$a!=$b';

}

//只要值不相等,或者类型不相等,则为true

if($a!==$b){

echo '$a!==$b';

}

请编写一个程序,该程序可以接收两个数(可以是整数,也可是小 数),并判断两个数是大于?小于?还是等于? 对应的案例:

$b=90;

if($a>$b){

echo '$a>$b';

}

if($a<$b)

{

echo '$a<$b';

}

if($a==$b){

echo '$a==$b';

} ?> 逻辑运算符

要求大家掌握的知识点有: 搞清每个逻辑运算的规则 案例 $a=10;$b=7;

if($a++>8 || $b++>7){

echo 'ok!';

}

echo 'a='.$a.'b='.$b;//把结果填写 $a=10;$b=7;

if($a++>10 && $b++>7){

echo 'ok!';

}

echo 'a='.$a.'b='.$b;$a=10;$b=7;

if($a++>18 && $b++>7){

echo 'ok!';

}

echo 'a='.$a.'b='.$b;

☞ 面试题: and && 都表示逻辑与,他们的区别在什么地方 主要体现在优先级上面 and 的优先级 and< = <&& or < = < || 配合案例: $e = false || true;$f = false or true;var_dump($e, $f);$e 是 true $f 是 false;.....40讲 三元运算符 类型运算符 运算符优先级

php基本语法-三元运算符 基本语法

表达式1 ? 表达式2 : 表达式3 规则:

更新时间:2012年11月11日18时53分 来源: 如果表达式1 的运算结果是 true, 则取 表达式2 的值,否则,取表达式3的值.举例 :

$a=90;

$b=180;

$c=$a>$b?(12-10):“hello,world”;

echo 'c=='.$c;?>

php 的字符串运算符 案例:

$a=“hello,world”;

$b=123;

$c=$b.$a;//$a 具体表示内容和 $b 表示内容拼接

echo $c;

从上面案例我们看出,当两个变量(基本数据类型)用.连接的时候,就表示把他们的内容拼接

类型运算符(了解)

基本语法是: instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例,通常在面向对象开发中可能用的.class Dog{}

class Cat{}

//创建一个对象

$cat1=new Cat;

//var_dump($cat1 instanceof Dog);

//在实际开发中,我们可能需要去判断某个变量是否是某个类型

if($cat1 instanceof Cat){

echo '$cat1 是一只猫';

}

运算符优先级的说明: //****运算优先级*****

☞ 如果将来你们有一个表达式很复杂,建议使用()来指定其运算优先级

$a=3;

$b=++$a*3;

echo $b;

41讲 顺序控制 分支控制(if ifelse switch)程序流程图

更新时间:2012年11月16日10时30分 来源:

php程序的三大流程控制 ①

顺序控制(从上到下,从左到右)$a=7;

echo “a=”.a;

echo “hello!”;

$a++;

echo “a=”.a;

echo “O(∩_∩)O”;

$a++;

echo “a=”+a;

所谓顺序控制流程,就是不加控制的流程,默认情况,会按照,顺序来执行你编写的代码 ②

分支控制

一个简单的定义: 有选择的来执行我们的代码.分为 1.单分支 2.双分支 3 多分支 1.单分支的基本语法结构 if(条件表达式){

语句;

//...//....}

这里我们,这里的条件表达式不管多复杂,最总运算的结果就是 true 或者 false;快速入门:

编写一个程序,可以输入人的年龄,如果该同志 的年龄大于18岁,则输出 “你年龄大于18,要对 自己的行为负责!” $age=7;

if($age>18){

echo '你的年龄大于18';

} 2.双分支 基本语法结构 if(条件表达式){

//n多语句;}else{

//n多语句;}

编写一个程序,可以输入人的年龄,如果该同志 的年龄大于18岁,则输出 “你年龄大于18,要对

自己的行为负责!”。否则 ,输出”你的年龄不大

这次放过你了.” 代码: $age=4;

if($age>18){

echo '你的年龄大于18';

}else{

echo '你的年龄小于18';

}

echo '
程序结束!';

3.多重分支 基本语法结构是 if(条件表达式){ //n多语句

}else if(条件表达式){ //n 多语句 }else if(条件表示式){ //.}//这里可能还有更多的else if else{ }

☞ 对上面的结构请注意:

(1)else if 可以有一个,也可以有多个(2)else 可以没有 快速入门案例:

编写一个程序,可以输入人的年龄,如果该同志 的年龄大于18岁,则输出 “你年龄大于18,要对

自己的行为负责,送入监狱”。如果该同志的年

龄大于10岁并且小于等于18,则输出 “你的年龄

也不小了,把你送少管所.”。其它情况,则输出

“小孩子,下次注意”。代码如下: $age=34;【1】 if($age>18【2】){

echo '你要被送入监狱';【3】 }else if($age>10 【4】 && $age<=18【5】){ echo '送入少管所';【6】 }else{

echo '下次注意';【7】 }

echo “over”;【8】 流程分析图:

switch分支语句 基本语法结构 switch(表达式){ case 常量1: //n多语句;break;case 常量2: //n多语句 break;defual:

//n多语句;

break;} ☞ 请注意:

1.case 语句有一到多

2.defaul 语句可以没有(根据自己代码的业务逻辑)3.通常,在case 语句后,要带break ,表示退出switch语句 4.常量的类型(int, float, 字符串, 布尔型)快速入门案例: 请编写一个程序,该程序 可以接收一个字符,比如 : a,b,c,d,e,f,g

a表示星期一,b表示星期 二 … 根据用户的输入显 示相依的信息.要求使用 switch 语句完成 $myChar=“b”;

switch($myChar){

case “a”:

echo '今天星期一,猴子穿新衣';

break;

case “b”:

echo '今天星期二,猴子当小二';

break;

case “c”:

echo '今天星期三,猴子爬雪山';

break;

default:

echo '没有匹配的日期';

}

echo 'okokook';一个案例: $i=“11“;

switch($i){

case 10:

echo '10';

case 1.3:

echo '11';

break;

default:

echo 'hello';

//break;

case 11:

echo '12';

break;

}

该案例得出一个结论: //最终的结论是:

首先按照case顺序进行配置,如果一个都没有匹配到,则执行

default语句的内容,直到遇到break,则退出switch Default语句放置的位置对执行的结果没有影响 如果$a=”1”,则会自动转化为整型1

42讲 循环控制①(for)

更新时间:2012年11月19日15时24分 来源: 学生的问题: 老师,说一下if语句和switch的区别,及应用场景。

回答: 从我们学习if 和 switch 分支看,if 对某个范围的判断,而switch是对一个点的判断, 所以我们可以这样去选择他们: 应用场景: 当我们 的分支就是几个点的时候(比如判断坦克的方向),就应当使用swtich ,如果你的分支是几个区域(范围)的判断,则考虑使用if ①

循环控制流程 首先说 for 循环控制 基本语法结构

for(循环初值;循环的条件;步长){

//n多语句;}

为什么需要循环控制 ?

问题 : 请输出9000000句,”你好,北京” 这样一问题: 怎样让我们的某段代码,循环的执行 分析图

for($i=0;$i<2;$i++){

echo '
你好,北京';

}

echo “over”;

内存图:

43讲 循环控制②(while dowhile)打印金字塔案例

更新时间:2012年11月20日11时54分 来源: while循环 基本语法结构是 while(循环条件){

//循环体 ,语句 }

案例: 使用while来打印 10句”你好北京 ” 代码:

//*****while循环*****

$i=0;//$i循环控制变量

while($i<10){

echo '
你好北京'.$i;

//这里我们对循环控制变量,自增.$i++;

} 流程分析图:

do..while循环控制 基本语法结构 do{

//循环体 }while(循环条件);

快速入门: 循环的显示 10句,”你好北京”;$i=0;【1】//循环控制变量 do{

echo '
dowhile你好北京'.$i;【2】 //对循环控制变量修改

$i++;【3】//这里有程序员自己控制步长.}while($i<10【4】);执行的流程图:

综合案例: 要求:

请使用循环控制语句,输出一个空心的菱形->两个思想

1.死去活来 2.先易后难 3.建立自己的函数库和工具库(积累)

*

* *

* *

* *

*

但是这个菱形的层数可以灵活的变化.比较困难-------》简单化

<-------->

案例如下:

//打印出金字塔的一半

//死去活来

//外层的for循环控制层数

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

//内层控制每层*的个数

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

echo '*';

}

echo '
';

}

//打印出整个金字塔

//如果打印3层

// * *-> 1 2个空格 1个*(1-1)*2+1=// ** ***-> 2 1个空格 3个*(2-1)*2+1=// *** *****-> 3 0个空格 5个*(3-1)*2+1=

5$n=20;

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 '
';

}

请大家打印出一个空心金字塔

*

* *

**** 思路:

我们可以这样考虑,在给每行输出* 号的时候,要有判断,(该给*号给*号,该给空格给空格)

思路肯定分析:

和一个空心的菱形

45讲 break语句 continue语句 常量

更新时间:2012年11月23日15时22分 来源:

循环相关的语句-break

基本的概念: 表示结束当前的 for、while、do..while、switch, 流程, 可以给一个数字,表示退出到第几层.快速入门案例:

for($i=0;$i<13;$i++){ echo '$i='.$i.“
”;if($i==10){

break;} }

快速入门的案例2: $i=0;while(++$i){ switch($i){ case 5:

echo “quit at 5
”;break;case 10:

echo “quit at 10
”;break 2;default: break;}

}echo '$i='.$i;结果是: quit at 5 quit at 10 $i=10 分析图:

从上面的案例,我们得到几个结论: 1.break语句 默认跳出 1层

2.break语句 后面带的数字,不能超过实际可以跳出的循环层数,否则,会报fatal error 循环相关语句-continue

基本概念: continue 用于结束本次循环剩余代码,从新开始新的一次循环(如果条件为真,就继续执行), continue 后面也可以带数字,表示从第几次循环重新开始 快速入门:

for($i=0;$i<13;$i++){ if($i==10){ continue;}

echo '$i='.$i.“
”;} 结果 $i=0 $i=1 $i=2 $i=4 $i=5 $i=6 $i=7 $i=8 $i=9 $i=10 $i=11 $i=12 hello 流程

goto语句

基本概念: 通过goto语句我们可以将程序跳转到指定的地方去执行.goto 标签;标签: 语句;快速入门案例: goto a;echo 'aa';a: echo 'bb';快速入门案例2

for($i=0,$j=50;$i<100;$i++){ while($j--){

if($j==17)goto end;} }

echo “i = $i”;end:

echo 'j = 17 '.$i.“||”.$j;结果: j = 17

php中常量 说明:

所谓常量,我们可以理解成就是特殊的变量: 体现在 1.定义常量前面不需要 $ 2.常量一旦定义,则不能修改其值 3.常量在定义的时候,就需要它赋初值.4.常量可以通过 define 或者 const

5.常量的名称,我们一般说是 全部大写,然后用下划线间隔

6.什么时候需要使用常量: 在程序中我们不希望某个值变化,则考虑使用常量,比如圆周率,税率....快速入门案例:

//第一种方法

define(“TAX_RATE”,0.08);

echo TAX_RATE;

//第二种方法(php5.3)

const TAX_RATE2=0.1;

echo '-'.TAX_RATE2;?>

46讲 函数基本概念 函数快速入门

函数讲解

提出一个问题? 请大家完成这样一个需求:

更新时间:2012年11月25日18时08分 来源: ①输入两个数,再输入一个运算符(+,-,*,/),得到结果.如果我们不考虑使用新的技术,用我们现在的知识结构,完成

//请大家完成这样一个需求:

//①输入两个数,再输入一个运算符(+,-,*,/),得到结果.$num1=34;

$num2=90;

$oper=“-”;

//$res表示结果

$res=0;

switch($oper){

case “+”:

$res=$num1+$num2;

break;

case “-”:

$res=$num1-$num2;

break;

case “*”:

$res=$num1*$num2;

break;

case “/”:

$res=$num1/$num2;

break;

default:

echo '运算符号有误!';

}

echo “计算结果是=”.$res;?>

从该代码分析,我们发现,如果别的页面也需要这样的功能,则代码的复用性不好--->函数引出 现在我们使用函数,来快速体验好处,示意图:

funcs.php(这个文件,我们定义了一个函数)

//我们一个计算,+* / 的代码集合->函数

//1.function 是一个关键字

//2.jiSuan 函数名(由程序员取名)

//3.$num1,$num2,$oper 是函数的参数列表(形参)

function jiSuan($num1,$num2,$oper){

//$res 表示计算的结果

$res=0;

switch($oper){

case “+”:

$res=$num1+$num2;

break;

case “-”:

$res=$num1-$num2;

break;

case “*”:

$res=$num1*$num2;

break;

case “/”:

$res=$num1/$num2;

break;

default:

echo '运算符号有误!';

}

//表示返回一个结果.return $res;

}

$a=12;

$b=45;

$type=“+”;

$res=jiSuan($a,$b,$type);

echo “res=”.$res;?>

函数调用的流程图 :

一个通俗理解图:

为了加深大家对函数调用的理解我们,举例(自己调用自己的案例)

function abc($n){

if($n>2){

abc(--$n);

}else{

echo '$n='.$n.“
”;

}

}

abc(4);?>

函数自己调用自己-》这个就称为递归调用.函数的深入使用讨论 函数的基本结构

function 函数名(参数列表){

//函数体;

//return 语句;}

参数列表可以是多个参数

参数可以多个,同时,其数据类型可以是php语言支持的任意类型

函数名开头的字母,以_ 或者 A_Z 或者 a-z ,不要用数字或者特殊字符开头 ④

函数名不区分大小写 ,这个与变量不一样.function Abc(){} 和 function abc(){} 是同一个函数.⑤

一个自定义函数中的变量是局部的,函数外不生效 案例:

function abc3()

{

$a=45;

echo 'a='.$a;

}

abc3();

echo 'aa='.$a;// 这里会报一个错误: Undefined variable: a ☞ 在php中有三种提示 notice : 注意 waring: 警告 error : 错误

使用global全局变量的时候,可使用在函数外的变量 案例,和分析图 $a=12;function abc3(){

//global $a;//我要在abc3中使用到外层 $a;$a+=45;} abc3();echo $a;分析图:

49讲 函数使用注意事项② 函数作业布置

更新时间:2012年11月30日16时20分 来源: ⑦

如果在函数中,我们不希望使用某个变量,或者是希望彻底的不再某个变量,则可以使用 unset(变量名);将该变量彻底删除.$a=12;

function abc3($a){

unset($a);//表示不再abc3函数范围内,不在使用$a,后面需要全新定义;

$a=45;

}

abc3($a);

echo $a;

在php函数中,我们可以给某些参数,赋一个默认的值.案例说明:

function abc($b,$a=2){

$res=$a+$b;

return $res;

}

$e=70;

echo abc($e).' ||';

echo abc($e,90);

$f=70;

echo abc($e,$f);

php传递变量的时候,默认是值传递,如果需要引用(地址)传递,可以使用 &变量名;举例说明:

50讲 函数再回顾 自定义函数

更新时间:2012年12月03日15时01分 来源: 回顾45讲49讲函数内容,请参考45讲到49讲笔记内容。

函数分为两大类 ①

自定义函数 自己写的函数 ②

系统函数 php语句本身给你提供,让你直接使用的函数, php设计者认为,在项目开发的过程,很多人都会用的一下功能,则就直接提供给你?

比如: 我要取一个数的绝对值?

funct myAbs($num){

if($num<0){

return-$num;}else{

return $num;} } ?>

由系统提供.51讲 位运算①

更新时间:2012年12月04日17时47分 来源:

位(bit)运算

二进制

所谓二进制就是逢二进一(0,1), 因为使用二进制只有 0, 1 两个数,简单,易于电子方式实现,同时,通过0,1 组合可以表示任意一个数.☞ 二进制有三个重要的概念 1.原码

用二进制来表示一个数,这个码就是原码.------> 原码 00000000 0000000 0000000 00000101 = 1*2的零次方+0*2的一次方+1* 2的二次方=1+0+4=5 2.负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)反码(正数的反码和它的原码一样 , 负数反码 是 符号位不变其它位取反)补码(正数的补码和它的原码一样,负数的补码是 它的反码+1)举例-1

-1的原码 10000000 00000000 00000000 00000001-1的反码 11111111 11111111 11111111 11111110-1 的补码 11111111 11111111 111111111 11111111 3.在计算机运算的时候,都是以补码的方式来运算的 4+5=>计算机 4-5=4+(-5)

这句话意思就是,不管一个数是正数还是负数,都要被转成补码,然后进行运算.位运算一览表

该图的前面四个是位运算 其运算规则是:

按位与& : 两位全为1,结果为按位或| : 两位有一个为1,结果为1

按位异或 ^ : 两位一个为0,一个为1,结果为1

按位取反 : 0->1 ,1->0 看看前面给出的题,是否完成 ~2=?

步骤 : 首先要求出 2的补码 2是正数 所以 原码=反码=补码 2 原码

00000000 00000000 00000000 00000010 ~2

11111111 11111111 11111111 11111101(补码)->原码 ? 负数的 原码-》反码-》补码

11111111 11111111 11111111 11111101-> 推出其反码(对补码-1)

11111111 11111111 11111111 11111100 推出原码

52讲 位运算②

更新时间:2012年12月06日10时57分 来源: 10000000 00000000 00000000 0000011->-~-5=?

-5 的 补码找出来.-5 原码 10000000 00000000 00000000 00000101-5 反码 11111111 11111111 11111111 11111010-5 补码 11111111 11111111 11111111 11111011

~-5取反 00000000 00000000 00000000 00000100(补码)4

2&3=?

2&3 首先要找到 2 和 3的补码

的补码 00000000 00000000 00000000 00000010

的补码 00000000 00000000 00000000 00000011

2&3 00000000 00000000 00000000 00000010 [补码

2|3=?的补码 00000000 00000000 00000000 00000010

的补码 00000000 00000000 00000000 00000011

2|3

00000000 00000000 00000000 00000011

2^3的补码 00000000 00000000 00000000 00000010

的补码 00000000 00000000 00000000 00000011

2^3 00000000 00000000 00000000 00000001

13&7=?

5|4=?

-3^3=?

位移运算

在php 中位运算有两种 >>(右移)<<(左移)运算的规则是 :

算术右移:低位溢出,符号位不变,并用符号位补溢出的高位

算术左移: 符号位不变,低位补0 根据我们前面的规范,来完成几个案例 $a=1>>2;1 的补码

00000000 00000000 00000000 00000001 1>>2

00000000 00000000 00000000 00000000

$b=-1>>2;

步骤-1 的补码

-1 的原码 10000000 00000000 00000000 00000001

-1 的反码 11111111 11111111 11111111 11111110

-1 的补码 11111111 11111111 11111111 11111111

-1 >> 2

11111111 11111111 11111111 11111111 补码

结果

补码->原码

反码 11111111 11111111 11111111 11111110

原码 10000000 0000000 00000000 00000001 $c=1<<2;1<<2 1的补码

00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000100

$d=-1<<2;

53讲 数组介绍 数组的创建 数组的遍历

更新时间:2012年12月07日17时49分 来源: 10进制->2进制 7 对 除

2数组(重点)提出一个问题?

一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg。请问这六只鸡的总体重是多少?平均体重是多少? 请你用现在掌握的技术编一个程序。现在我们使用现有的技术来解决问题 array01.php $hen1=3;

$hen2=5;

$hen3=1;

$hen4=3.4;

$hen5=2;

$hen6=50;

如果我们的变量很多,如果我们分别取变量名,显示程序无法控制.怎么办?

我们可以使用一个新的数据类型array 数组,来统一个管理这一组数

什么是数组

可以用于存放多个数据的数据类型,我们称为数组 快速体验案例: 用数组来解决养鸡场的问题 //使用数组来完成案例

$hens[0]=3;

$hens[1]=5;

$hens[2]=1;

$hens[3]=3.4;

$hens[4]=2;

$hens[5]=50;

$hens[6]=30;

$allWeight=0;

//遍历整个数组

//有时为了知道某个数组共有多少个元素,可以使用系统函数count

echo “共有”.count($hens).“只鸡
”;

for($i=0;$i

echo “第”.($i+1).“只鸡体重=”.$hens[$i].“
”;

$allWeight+=$hens[$i];

}

echo '
总体重是='.$allWeight.'平均体重='.$allWeight/count($hens);小结: 该案例重点说明数组基本使用,细节后面说

数组创建

在php中,数组就是关键字和值的集合,我们可以这样创建 ①

创建数组 $arr[0]=123;$arr[1]=90;$arr[2]=8;几个概念:

[0]-> 这个我们称为下标,或者称为 关键字 $arr[0]-> 这个称为数组的一个元素.$arr[0]=123;123 表示该$arr[0]元素对应的值 $arr –》这个是该数组的名称.在php数组中,元素存放的值可以是任意数据数据类型 , 举例说明:

$arr[0]=123;

$arr[1]=“hello”;

$arr[2]=45.6;

$arr[3]=true;

$arr[4]=null;//即使放入了一个null,也要占一个空间

echo “数组大小”.count($arr);

//遍历一下

for($i=0;$i

echo '
'.$arr[$i];

} ?>

创建数组的第二种方法 基本语法

$数组名=array(值,.......);举例说明:

$arr=array(1,90,“helllo”,89.5);

//遍历一把

for($i=0;$i

echo “
”.$arr[$i];

}

第三种方式创建数组(在默认情况下,我们的元素的下标,是从0开始给你编号,但是实际上,也可以自己指定)基本语法

$arr[„logo‟]=”北京”;$arr[‟hsp‟]=123;....或者 $arr=array(”logo”=>”北京”,”hsp”=>123,4=>678);案例演示:

$arr[0]=123;

$arr[1]=90;

//遍历

/* for($i=0;$i

echo '
'.$arr[$i];

}*/

//这个foreach适用范围更广

foreach($arr as $key2=>$val2){

echo $key2.“=”.$val2.“
”;

}

54讲 数组的引用 数组使用细节①

更新时间:2012年12月09日20时22分 来源: ☞ 注意事项

①如果我们创建一个数组的时候,没有给某个元素指定下标,php就会自动的用目前最大的那个个下标值(整数),加上一作为该元素的下标(关键字)

$arr=array(5=>“logo”,567,90);

//我要访问“logo”这个值

echo $arr[5];

echo “
”.$arr[6];

②如果我们给某个元素的下标一样,则会覆盖原来的值: $arr=array(5=>“logo”,567,90);

//我要访问“logo”这个值

$arr[5]=“yes”;//替换某个元素值

echo $arr[5];

echo “
”.$arr[6];

如果我们使用true ,false null 作为key, 则应当怎样访问 $arr[true]=“hello”;//==> $arr[1]

$arr[false]=“world”;//==> $arr[0]

$arr[null]=“北京”;//==> $arr[null] 或者 $arr[“"];

//null<==>”“

echo $arr[0];

echo ”
“.$arr[null];⑤

//我们通常可以使用print_r来显示这个数组情况

print_r($arr);

echo ”
“;

//var_dump可以更加详细的显示数组的信息

var_dump($arr);

访问数组的时候,不要越界比如: $arr=array(56,100,101);

echo $arr[2];//数组越界

echo ”hello“;

一维数组的引用 基本语法: $数组名[键值];

如果你写的键值不存在,则会报告: Notice: Undefined offset

一维数组使用陷阱 //*****一维数组引用陷阱

$arr[bar]=”hello,world“;echo $arr[bar];这样使用时危险!!

php的数组可以动态的增长 $a=array(2,3);

//这里说明php的数组是可以动态增长.$a[3]=56;

echo $a[2];

php的数组相关的函数说明 ①

count 函数 基本用法是

count($数组名);可以统计该数组共有多少元素.②

is_array

print_r 和 var_dump ④

explode 对字符串进行分割 案例:

$str=”北京&顺平&天津&宋江&林冲“;

//在实际开发中,涉及到字符串的拆分,可以考虑

$arr=explode(”&“,$str);

print_r($arr);

php数组遍历的四个方法

☞ 如果使用 for while do..while 要确定该数组的下标是从 0开始顺序排放 $colors = array('red', 'blue', 'green', 'yellow');

//for while do_while

//for

for($i=0;$i

echo ”
“.$colors[$i];

}

//while

$i=0;//循环控制变量

while($i

echo ”
“.$colors[$i];

$i++;

}

//do..while

$i=0;//循环控制变量

do{

echo ”
“.$colors[$i];

$i++;

}while($i

//foreach

echo ”
*********“;

foreach($colors as $k=>$v){

echo ”
$k=$v“;

}

55讲 数组使用细节② 数组运算符 数组作业评讲① 数组小结

更新时间:2012年12月11日16时58分 来源:

使用unset函数可以销毁某个元素,也可以销毁某个变量,销毁该元素后,关键字不会重新组合.$arr[0]=123;

$arr[1]=456;

$arr[2]=”hello“;

//比如现在我要删除 $arr[1] 元素

echo ”
**删除前****“;

echo $arr[1];

unset($arr[1]);

echo ”
**删除后****“;

echo $arr[1];

echo print_r($arr);

数组运算符(了解即可)

$a = array(”a“ => ”apple“, ”b“ => ”banana“);

$b = array(”a“ => ”pear“, ”b“ => ”strawberry“, ”c“ => ”cherry“);

$c = $a + $b;//$b数组的键和值加到$a

echo ”$a + $b result
“;

var_dump($c);// ”a“ => ”apple“, ”b“ => ”banana“ ”c“ => ”cherry“

echo ”
“;

$c = $b + $a;//”a“ => ”pear“, ”b“ => ”strawberry“, ”c“ => ”cherry“

echo ”$b + $a result
“;

var_dump($c);

数组的案例:

为加强大家对数组的理解,我们再给大家出一个题,我们一起完成.在运动会上,五个小孩比赛滑轮,他们的滑完100米,分别用了10s、12s、5.7s、9s、14s,请编写一个程序,计算他们的平均时间?[array03.php] 时间保留到小数点后两位.

请输入五个小孩的成绩,用空格隔开

第四篇:传智播客 韩顺平php从入门到精通 61-78讲面向对象课堂笔记

php面向对象编程 提出一个问题?

张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。数组<--->对象

array(1,56,90,100)->隐藏问题array(对象,对象。。)【数组对象】 首先我们用现有的知识来完成这个案例:

$cat1_name=”小白”;

$cat1_age=3;

$cat1_color=”白色”;

//变量是分开.$cat2_name=”小花”;

$cat2_age=100;

$cat2_color=”花色”;?>

我们能不能把属于同一事物的变量,统一管理? 解决之道->对象 快速体验案例:

//这就是一个类(猫类)class Cat{

//属性

public $name;

public $age;

public $color;}

//创建一只猫 $cat1=new Cat();//给这只猫赋值.(具体各个)$cat1->name=“小白”;$cat1->age=3;$cat1->color=“白色”;$cat2=new Cat();$cat2->name=“小花”;$cat2->age=100;$cat2->color=“颜色”;//如果我们找到一只猫,只要找到 $cat1, 那么该变量所有相关的属性都通通的找到 $findCatName=“小花”;

if($cat2->name==$findCatName){

echo $cat2->name.“||”.$cat2->age.“||”.$cat2->color;} ?>

我们这里说明一下类和对象的关系(细节后面逐步展开)

总结几句话:

类是抽象的,代表一类事物 ②

对象是具体,是类的一个具体实例 ③

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

php面向对象编程

成员属性的说明

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

class Cat{ public $name;public $age;}

//创建对象

$cat1=new Cat;

$cat1=new Cat();?>

2.怎样访问一个成员属性(其它成员属性是public)基本语法是 $对象名->属性名;

☞如果一个文件,专门用于定义类,则命名规范应当这样

类名.class.php 分析对象在内存中存在的形式 //定义一个人类 class Person{ public $name;public $age;} $a=new Person();$a->name=“小明”;$a->age=20;//把a变量(对象),赋给$b $b=$a;echo $a->name.“
”;echo $b->name.“
”;

再次说明: $a=78;//$b=$a;$b=&$a;$b=$b+8;echo $a.“||”.$b;

如果给一个函数传递一个对象,实际上是传递的一个地址.//看下面的一段代码: class Person{

public $name;public $age;} $p1=new Person();$p1->name=“韩顺平”;$p1->age=33;//函数接收对象时候,究竟是传入值,还是地址(!!)

function test1($p){ $p->name=“小明”;} test1($p1);echo $p1->name;分析图

如果给函数传递的是基本数据类型(整数、小数、布尔、字符),究竟传递的是什么? 结论 : 在默认的情况下是传递的值,如果你希望传入地址 function test(&$变量....){ }

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

$a1=array(1,3,900);$a2=array(56,90,100);

$arr=array($a1,$a2);

foreach($arr as $k=>$v){

echo “$k=$v”;} ?>

成员方法的讲解 函数和成员方法关系:

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

我们有这样一个需求;希望人可以说话, 做算术题.......,这样就需要使用到成员方法: ①添加speak 成员方法,输出我是一个好人

②添加jisuan成员方法,可以计算从 1+..+1000的结果

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

④添加add 成员方法,可以计算两个数的和 成员方法的基本语法:

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

//函数体

//return 语句;}

class Person{

public $name;

public $age;

public function speak(){

echo “我是一个好人!”;

}

public function count1(){

$res=0;

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

$res+=$i;

}

//return 究竟到什么地方去?谁调用,就返回给谁

return $res;

}

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

public function count2($n){

$res=0;

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

$res+=$i;

}

return $res;

}

//添加add 成员方法,可以计算两个数的和

public function add($num1,$num2){

return $num1+$num2;

}

}

//如何使用函数

//1.创建一个人

$p1=new Person();

//通过对象去访问,调用成员方法.//这里强调,调用成员方法和调用普通函数的机制,仍然不变

$p1->speak();

//让这个人做算术题

$res=$p1->count1();

echo '计算结果是='.$res;

//让这个人可以接收一个数,然后计算

echo “计算结果是=”.$p1->count2(100);

echo “计算结果是=”.$p1->count2(100);

echo “计算结果是=”.$p1->count2(100);

echo “23+89=”.$p1->add(23,89);?>

成员方法的细节

我们在实际开发,其实通常是这样来使用类

Person.class.php < ?php

class Person{

//成员属性

public $name;

public $age;

//成员方法

public function speak(){

echo “我是一个好人!”;

}

public function count1(){

$res=0;

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

$res+=$i;

}

//return 究竟到什么地方去?谁调用,就返回给谁

return $res;

}

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

public function count2($n){

$res=0;

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

$res+=$i;

}

return $res;

}

//添加add 成员方法,可以计算两个数的和

public function add($num1,$num2){

return $num1+$num2;

}

//添加一个新的方法,可以判断三个数最大的数

public function findMax($arr){

//这里仍然可以写算法

//从$arr数组中,找到最大的数.//1.假设数组的第一个数就是最大的数

$maxVal=$arr[0];

//2.最大数的下标是

$maxIndex=0;

//开始循环的比较

for($i=1;$i

//这个条件说明,maxVal不是最大

if($maxVal<$arr[$i]){

//调整

$maxVal=$arr[$i];

$maxIndex=$i;

}

}

return $maxVal;

}

}

?>

Exercise01.php < ?php

//引入类文件

require_once „Person.class.php‟;

//创建对象

$p1=new Person();

//调用$p1的各个方法

$p1->speack();

$p1->count1();..?>

案例:编写一个函数(以面向对象的方式开发),从网页输入一个整数打印出对应的金子塔:

当我们学习完成员方法后,我们的类定义就完善一步了:

1.设计计算机类,要求如下: 属性:品牌,颜色,cpu型号,内存容量,硬盘大小,价格,工作状态

方法: 打开,关闭,休眠(表示)创建一个计算机对象,调用打开,关闭方法.php面向对象编程

构造方法 class Person{

public $name;

public $age;}

$p1=new Person();//再给属性赋值 $p1->name=”宋江”;$p1->age=33;

//需求在创建一个人对象时候,我就初始化 name 和 age;->构造方法 我们快速入门: class Person{

public $name;

public $age;

public function __construct(){

echo “我是构造方法”;

}

//业务代码要放在成员方法 public function findPerson(){ } }

$p1=new Person();☞构造方法没有返回值, 它是自动被调用

2.在php 5 中一个类可以同时有两种形式的构造方法

__construct()和类名(), 当两个同时存在的时候,优先调用__construct(), 请大家以后使用__construct()

this的理解 class Person{ public $name;public $age;

//这个就是构造方法,php5独有

public function __construct($iname,$iage){

//$name认为$name是一个新的变量

//$name=$iname;

//$age=$iage;

$this->name=$iname;

$this->age=$iage;

echo “我是构造方法”;} }

$p1=new Person(“张清”,90);echo “hello-”.$p1->name;$p2=new Person(“宋江”,33);echo “aa-”.$p2->name;$this 理解图:

☞ 1.$this 本质可以理解就是这个对象的地址

2.哪个对象使用到$this, 就是哪个对象地址

3.$this不能在类外部使用.构造方法的注意事项

(1)一旦自定义了一个构造函数,默认的

构造函数就被覆盖了,这时在创建对象的时候就要使用自定义的构造函数.(2)一个类只能有一个构造函数.(不能重载)构造方法的8点说明:

①构造方法名和类名相同(php4版),php5版的构造方法 名可以和类名相同,也可以是__construct()②构造方法没有返回值

③主要作用是完成对新对象的初始化,并不是创建对象本身。④在创建新对象后,系统自动的调用该类的构造方法

⑤一个类有且只有一个构造方法,在php5后虽然__construct()和类名()可以共存,但是实际上也只能使用一个。

⑥如果没有给类自定义构造方法,则该类使用系统默认的构造方法。class Cat{

funciton __construt($name){

echo “ok”;}

}

$cat1=new Cat();

⑦如果给类自定义了构造方法,则该类的默认构造方法被覆盖。⑧构造方法的默认访问修饰符是public

析构方法

析构方法的作用主要用于,释放资源(比如释放数据库的链接,图片资源...销毁某个对象..)快速入门

class Person{

public $name;

public $age;

public $conn;

//构造方法

public function __construct($name,$age){

$this->name=$name;

$this->age=$age;

//打开一个$conn链接数据库的资源

}

//写一个析构方法 __ 是两个下划线

function __destruct(){

echo $this->name.“销毁资源关闭数据库..
”;

}

}

$p1=new Person(“贾宝玉”,16);

$p2=new Person(“林黛玉”,14);?>

运行代码我们得出: 1.析构方法会自动调用 2.析构方法主要用于销毁资源

3.析构方法调用顺序是,先创建的对象后被销毁 4.析构方法什么时候被调用(1)当程序(进程结束)退出时

(2)当一个对象称为垃圾对象的时候,该对象的析构方法也会被调用,(3)所谓垃圾对象,就是指,没有任何变量再引用它.(4)一旦一个对象成为垃圾对象,析构方法就会立即调用 示意图:

小结:

①php5加入的的析构方法function __destruct()②析构方法没有返回值

③主要作用是释放资源的操作,并不是销毁对象本身。④在销毁对象前,系统自动的调用该类的析构方法

⑤一个类最多只有一个析构方法。

更新时间:2013年01月03日17时03分 来源: 静态变量 提出一个问题:

说,有一群小孩在玩堆雪人,不时有新的小孩加入, 请问如何知道现在共有多少人在玩?请使用面向 对象的思想,编写程序解决。思路:

1.使用全局变量

* 什么是全局变量, 在程序中,都可以使用的变量称为全局变量.当我们了解全局变量后,我们来看看如何解决问题?

//定义,完游戏的全局变量

global $global_nums;

//赋值

$global_nums=0;

class Child{

public $name;

function __construct($name){

$this->name=$name;

}

public function join_game(){

//声明一下使用全局变量

global $global_nums;

$global_nums+=1;

echo $this->name.“加入堆雪人游戏”;

}

}

//创建三个小孩

$child1=new Child(“李逵”);

$child1->join_game();

$child2=new Child(“张飞”);

$child2->join_game();

$child3=new Child(“唐僧”);

$child3->join_game();

//看看有多少人玩游戏

echo “
有”.$global_nums;?>

2.使用静态变量 静态的变量的基本用法 1.在类中定义静态变量 [访问修饰符] static $变量名;2.如何访问静态变量

如果在类中访问 有两种方法self::$静态变量名 , 类名::$静态变量名 如果在类外访问: 有一种方法类名::$静态变量名 3.静态变量存在方式

解法: class Child{

public $name;

//这里定义并初始化一个静态变量 $nums

public static $nums=0;

function __construct($name){

$this->name=$name;

}

public function join_game(){

//self::$nums使用静态变量

self::$nums+=1;

echo $this->name.“加入堆雪人游戏”;

}

}

//创建三个小孩

$child1=new Child(“李逵”);

$child1->join_game();

$child2=new Child(“张飞”);

$child2->join_game();

$child3=new Child(“唐僧”);

$child3->join_game();

//看看有多少人玩游戏

echo “
有这”.Child::$nums;

静态方法

需求: 当我们操作静态变量的时候,我们可以考虑使用静态方法,比如统计所有学生交的学费

在我们编程中,我们往往使用静态方法去操作静态变量.静态方法的特点

1.静态方法去操作静态变量

2.静态方法不能操作非静态变量.这里请注意 : 普通的成员方法,既可以操作非静态变量,也可以操作静态变量

php面向对象编程的三大特征

封装 ②

继承 ③

多态

抽象

class Account {

public $blance;

public $no;

public function qun(){ } public function cun(){ } }

封装

那么在php中如何实现这种类似的控制呢?请大家看一个小程序.(visit1.php),不能随便查看人的年龄,工资等隐私...class Person{

public $name;

private $age;

private $salary;

function __construc($name,$age,$salary){

$this->name=$name;

$this->age=$age;

$this->salary=$salary } }

php提供了三种访问控制符号.有三种

1.public 表示全局,可以在本类,类外部,子类中使用 2.protected 表示受到保护,可以在本类, 子类中使用 3.private 表示私有, 只能在本类使用

这三个控制修饰符号可以对属性和方法修饰

1.如果一个方法没有访问修饰符,则默认是public 2.属性必须指定访问修饰符

☞方法之间可以互相调用.但是需要使用 $this引用 function test11(){

$this->test12();

}

protected function test12(){

echo “test12 hello”;

}

举例说明: class Person{

public $name;

protected $age;

private $salary;

function __construct($name,$age,$salary){

$this->name=$name;

$this->age=$age;

$this->salary=$salary;

}

//成员方法

function showInfo(){

//这里说明在本类中可以使用 public protected 和private 修饰的变量.echo $this->name.“||”.$this->age.“||”.$this->salary;

}

}

//创建一个人

$p1=new Person(“孙悟空”,30,1000);

echo $p1->name;//可以

echo $p1->age;//报错

echo $p1->salary;//报错.?我们现在就想去访问protected 变量或者 private 变量, 通常的做法是提供 public 函数去访问这些变量.形式是

public function setXxx($val){ } public function getXxx(){ } public function showInfo(){ }

public protected private 可以修饰属性和方法

(1)查看薪水(private)//获取这个人的薪水

public function getSalary($user,$pass){

if($user==“shunping” && $pass=“123”){

return $this->salary;

}else{

return “sorry,你无法看”;

}

}(2)修改人的年龄

提供了两个函数.//修改年龄,对输入的值,进行校验.public function setAge($age){

if($age>1 && $age<120){

$this->age=$age;

}else {

echo “年龄范围不对”;

}

}

//查看年龄

public function getAge(){

return $this->age;

}

还有一种形式, 通过一对 __set 和 __get方法来操作我们的变量,不推荐.class A{

private $n1;

private $n2;

private $n3;

//使用__set 方法来管理所有的属性

public function __set($pro_name,$pro_val){

$this->pro_name=$pro_val;

}

//使用__get 可以获取所有的属性值

public function __get($pro_name){

if(isset($pro_name)){

return $this->pro_name;

}else{

return null;

}

}

}

$a1=new A();

$a1->n1=“hello”;

echo $a1->n1;

$a1->n2=890;

echo “||”.$a1->n2;

可以直接写一个方法了操作变量 class Peron{

protected n1;

private $n2;

function showInfo($n1){

$this->n1=$n1;

echo $this->n1.”||”$this->n2;} }

为什么需要继承

//应用场景开发一套学生管理系统(Pupil, Graduate ,...)

//小学生类

class Pupil{

public $name;

protected $age;

protected $grade;

public function showInfo(){

echo $this->name.“||”.$this->age;

}

public function tesing(){

echo “ 小学生考试..”;

}

}

//研究生类

class Graduate{

public $name;

protected $age;

protected $grade;

public function showInfo(){

echo $this->name.“||”.$this->age;

}

public function tesing(){

echo “研究生考试..”;

}

}

从上面的代码我们看出,代码的复用性不高,同时也会让管理代码成本增高.

解决之道(继承);

现在我们使用继承对上面的代码,进行改写.代码:

//应用场景开发一套学生管理系统(Pupil, Graduate ,...)

//父类

class Stu{

public $name;

protected $age;

protected $grade;

public function showInfo(){

echo $this->name;

}

}

//子类

class Pupil extends Stu{

public function testing(){

echo “ 小学生考试..”;

}

}

class Graduate extends Stu{

public function testing(){

echo “研究生考试..”;

}

}

//创建学生

$stu1=new Pupil();

$stu1->name=“小明”;

$stu1->testing();

$stu1->showInfo();

//创建一个研究生

$stu2=new Graduate();

$stu2->name=“老明”;

$stu2->testing();

$stu2->showInfo();

☞从上面的代码我们可以看出: 所谓继承就是一个子类通过 extends 父类 把父类的(public / protected)属性和(public / protected)方法继承下来.继承的基本语法是:

class 类名 extends 父类名{

//在写自己需要的属性和方法.}

讨论继承细节:

讨论继承细节:

1.父类的 public、protected 的属性和方法被继承.private 的属性和方法没有被继承.2.一个类只能继承一个父类,(直接继承).如果你希望继承多个类的属性和方法,则使用多层继承 class A{

public $n1=90;}

class B extends A{

public $n2=“hello”;}

class C extends B{

}

$c=new C();echo $c->n1;

3.当创建子类对象的时候,默认情况下,不会自动调用父类的构造方法.class A{

public $n1=90;

//构造方法

public function __construct(){

echo “A __construct”;

}

}

class B extends A{

function __construct(){

echo “B __construct”;

}

}

//创建B对象实例

$b=new B();

4.如果我们希望去调用父类的构造方法,或者其它的方法(public / protected),可以这样处理(了解)

4.1 类名::方法名()4.2 parent::方法名()举例

class A{

public $n1=90;

//构造方法

public function __construct(){

echo “A __construct”;

}

}

class B extends A{

function __construct(){

echo “B __construct”;

//显式的调用父类的方法

//A::__construct();

parent::__construct();

} }

//创建B对象实例 $b=new B();

5.当一个子类的方法和父类的方法完全一样(public protected), 我们称为方法的覆盖(方法重写)

重载

基本概念: 函数名一样,通过函数的参数个数或者是参数类型不同,达到调用同一个函数名,但是可以区分不同的函数 class A{

public function test1(){

echo “test1”;} public function test1($a){

echo “test1 hello”;} } 重载

$a =new A();$a->test1();$a->test1(456);上面的这用用法是不对.PHP5 中如何通过魔术函数来实现方法重载的效果 代码说明

class A{

public function test1($p){

echo “接收一个参数”;

echo “
接收到参数是”;

var_dump($p);

}

public function test2($p){

echo “接收两个参数
”;

var_dump($p);

}

//这些提供一个__call

//__call 是它一个对象调用某个方法,而该方法不存在,则

//系统会自动调用__call

function __call($method,$p){

var_dump($p);

if($method==“test”){

if(count($p)==1){

$this->test1($p);

}else if(count($p)==2){

$this->test2($p);

}

}

}

}

$a=new A();

$a->test(1);

$a->test(56,90);

?> 小结: 关于重载

① php5 默认情况下不直接支持方法重载 ② php5 可以同__call魔术方法,模拟一个方法效果的效果

方法的重写/方法的覆盖(override)①

先看一个问题

当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法究竟如何写,可以让子类去覆盖这个方法,具体用法如下:

//抽象一个Animal类

class Animal{

public $name;

protected $price;

function cry(){

echo “不知道动物怎么叫..”;

}

}

class Dog extends Animal{

//覆盖

function cry(){

echo “小狗汪汪叫..”;

}

}

class Pig extends Animal{

//覆盖.function cry(){

echo “哼哼叫..”;

}

}

//创建一个只狗

$dog1=new Dog();

$dog1->cry();

$pig1=new Pig();

$pig1->cry();?> 关于方法重写细节讨论

1.要实现重写,要求子类的那个方法的名字和参数列表个数一摸一样,但是并不要求参数的名称一样.2.如果子类要去调用父类的某个方法(public / protected)则可以使用 parent::方法名(参数..), 父类名::方法名(参数...)3.在实现方法覆盖的时候,访问修饰符可以不一样

//但是必须满足: 子类的访问范围>=父类的访问范围 多态体现在什么地方? class Animal{

public function cry(){

echo '动物叫唤..';

}

}

class Cat extends Animal{

public function cry(){

echo “abc”;

}

}

$cat1=new Cat();

$cat1->cry();当子类没有覆盖父类的方法则 $cat1->cry()调用的是父类,当子类覆盖了父类的方法,则调用自己的cry()

抽象类

为什么设计抽象类这个技术?

1.在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承,这样可以到达代码复用.同时利于项目设计者,设计类.快速入门

//在实现方法覆盖的时候,访问修饰符可以不一样

//但是必须满足: 子类的访问范围>=父类的访问范围

abstract class Animal{

public $name;

protected $age;

//这个方法没有方法体,这个方法主要是为了让子类去实现.abstract public function cry();

}

class Cat extends Animal{

public function cry(){

echo “猫猫叫唤..”;

}

}

//创建一个子类实例

$cat1=new Cat();

$cat1->cry();使用抽象类的注意事项: 1.基本用法 abstract class 类名{

//方法

//属性 }

2.如果一个类使用abstract 来修饰,则该类就是抽象类, 如果一个方法被abstract修饰,则该方法就是抽象方法【抽象方法就不能有方法体.】

3.抽象类可以没有抽象方法.同时还可以有实现了的方法.

//在实现方法覆盖的时候,访问修饰符可以不一样

//但是必须满足: 子类的访问范围>=父类的访问范围

abstract class Animal{

public $name=“abc”;

protected $age;

//这个方法没有方法体,这个方法主要是为了让子类去实现.abstract public function cry();

public function getName(){

return $this->name;

}

}

class Cat extends Animal{

public function cry(){

echo “猫猫叫唤..”;

}

}

//创建一个子类实例

$cat1=new Cat();

$cat1->cry();

echo $cat1->getName();

?>

4.如果一个类中,只要有抽象方法,则该类必须声明为abstract abstract class A{

abstract function test();

}

echo “ok”;

5.如果A类继承了一个抽象类 B,则要求A类实现从B类继承的所有抽象方法 案例:

//这是一个抽象类

abstract class A{

abstract function test();

}

//B类要么自己抽象,或者实现从A类继承的抽象方法.class B extends A{

function test(){

echo “我实现A:test()”;

}

}

echo “hello”

接口 快速入门:

//使用程序模拟现实情况

//定义规范(方法/属性)

interfaceiUsb{

public function start();

public function stop();

}

//编写相机类,让它去实现接口

//1.当一个类实现了某个接口,则要求该类必须实现这个接口的所有方法

class Camera implements iUsb{

public function start(){

echo “相机开始工作”;

}

public function stop(){

echo “相机停止工作...”;

}

}

//编写手机类

class Phone implements iUsb{

public function start(){

echo “手机开始工作”;

}

public function stop(){

echo “手机停止工作...”;

}

}

//如何使用

$camera1=new Camera();

$camera1->start();

$camera1->stop();

echo “
”;

//手机对象

$phone1=new Phone();

$phone1->start();

$phone1->stop();?>

1.接口的使用基本语法 interface 接口名{

//属性

//方法 }

接口的方法都不能有方法体 如何去实现接口

class 类名 implements 接口名1,接口2.{ }

接口它的作用就是声明一些方法,供其它类来实现.接口还体现编程中我们希望的效果高内聚低耦合的特点:

继承是实现接口的关系一览图

深入讨论接口-interface 什么情况下可以考虑使用接口 1.定规范

2.定下规范,让别的程序员来实现,比如: //韩是项目经理

//学生管理系统(students)

//定义接口

interfaceStuManageInterface{

public function addStudent($stu);

public function delStudent($id);

public function updStudent($stu);

}

//给三

classStuManage {

public function tianjiaxuesheng(){

}

}

//四

3.当多个类,他们之间是平级的关系.这些类都会去实现某个功能,只是实现的方式不一样.接口的细节

1.不能去实例化一个接口 interfaceiUsb{ }

$a=new iUsb();(错误!!)

2.接口中的所有方法,都不能有方法体 3.一个类可以去实现多个接口 语法:

class 类名 implements 接口1,接口2{ }

4.接口中可以有属性,但是必须是常量,并且是public interfaceiUsb{

const A=90;

}

echo “ok”.iUsb::A;

5.接口的方法是public 【默认就是public 】 ,不能是 protected 和private 举例: interfaceiUsb{

const A=90;

function test();

}

echo “ok”.iUsb::A;6.类和接口之间关系一览图

代码:

interface iUsb2{

public function a();

}

interface iUsb3{

public function b();

}

interfaceiUsb extends iUsb2,iUsb3{

const A=90;

function test();

}

class Class1 implements iUsb{

public function a(){

}

public function b(){

}

public function test(){

}

}

echo “ok”.iUsb::A;?>

从上面我们看出 ① 一个接口可以继承多个其它的接口.当一个类去实现了某些接口,则必须把所有接口的方法,都实现

继承和实现接口的比较:(1)可以认为实现接口是对单一继承的补充.(2)可以在不破坏类层级关系的前提下,对某个类功能扩展.final关键字

1.如果我们希望某个类不被其它的类来继承(可能因为安全考虑...), 可以使用final

final class A{

}

class B extends A{

}

echo “ok”;?> 2.如果我们希望某个方法,比如计算个人所得税的方法,不能子类改写,可以使用fianl来修饰方法 class A{

final public function getRate($salary){

return $salary*0.08;

}

}

class B extends A{

//不能去覆盖父类的getRate方法./*public function getRate($sal){

return $sal*0.01;

}*/

}

$b=new B();

echo $b->getRate(100);3.final关键字不能去修饰属性.const关键字的讲解

//当你有一个属性,不希望被修改,则考虑使用const做成常量 基本用法是 class A{

const常量名=赋初值;} interface 接口名{

const常量名=赋初值;} 常量是public

使用类名::常量名;接口名::常量

class A{

//常量在定义的时候,必须给初值.//const关键字前面不要带修饰符号.const TAX_RATE=0.08;

public function payTax($val){

//常量不能修改.//A::TAX_RATE=0.01;

//return $val*self::TAX_RATE;【ok】

return $val*A::TAX_RATE;//【ok】

}

}

$a=new A();

echo $a->payTax(200);?> 1.常量在定义的时候需要赋初值 2.常量不能修改.3.常量名不能有 $, 一般是大写, 默认是public

4.常量在类的内部使用 self::常量的名称类名::常量的名称 在类的外部使用类名::常量的名称.面向对象编程的综合案例

现在我们一起来完成一个稍微综合的案例---php版本的计算器,从而加深对php的认识,为下一步学习做准备。先用两个页面来完该计算器: myCal.php(界面)myResult.php(计算)知识点:

1.如何接收php页面提交的数据,并处理

2.php中如何使用javascript完成对数据合法性的校验

我们一起来开发.5.画出程序框架图: 6.编写代码: 现在我们分析如果要求把 xml 的作业改成面向对象的方式.怎么该?

第五篇:广州传智播客分析2014IT软件工程师的发展

广州传智播客分析2014IT软件工程师的发展

戏剧化的2013年还未结束,我们已迫不及待要把自己对于这么多新兴发展趋势的感受与大家分享

预测大数据在2013年将带来了340亿美元的IT开支,预计到2018年这一数据将增长三倍。可见IT行业在市场价值魅力空前。2014年IT业务的发展趋势也会将大幅度提升。尽管在各大IT培训机构的努力下,我国具备软件开发技能的人越来越多,但与软件行业的发展速度相比,软件人才显然仍存在较大缺口。

我国信息化建设步伐正在不断持续前进,IT界的发展迅速是众所周知的,单单从这几年,回顾手机方面的发展,谁会想到横行了几年的塞班系统在安卓,苹果的竞争下黯然退场。可技术科发展的大潮流里,套用一句诗词的话就是“长江后浪推前浪,前浪死在沙滩上”。IT行业应该是如今最火行业之一,且没有定义和垄断的行业!

下载传智播客 PHP程序员笔记第一天word格式文档
下载传智播客 PHP程序员笔记第一天.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐