php学习笔记

php学习笔记
php学习笔记

1、使php网页能正常显示中文:

修改php.ini

查找到并改为:default_charset=”gbk”

2、mysql

开始学习php了,这个语言啊就是和mysql数据库比较好使用了。mysql数据库又是开源的,哈哈!虽然有好多问题需要解决。就把自己遇到的问题和解决方法show出来,免得以后自己忘记了.

要想通过cmd进入mysql还真是遇到好多问题,我一路是过关斩将哦,不容易哦。^ o ^

第1个问题:ipconfig,ping等提示:不是内部或外部命令,也不是可运行的程序.

这个小问题本来和cmd进入mysql没有影响,但是不解决在cmd下用会相当的别扭,解决办法就是右键“我的电脑-属性-高级-环境变量-path”,进入编辑,添加变量值“;C:\windows\system32”,保存了就ok了。不过自己试过好想有“%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem”这些变量就不会出现这样的问题。加不加一样的.

第2个问题:mysql提示:不是内部或外部命令,也不是可运行的程序.

解决办法也是编辑path,添加变量值"mysql的安装目录\bin";这样就可以在cmd下使用mysql 了。(自己查看了网上的资料,很多是添加变量值"mysql的安装目录\bin\mysql.exe", 这样还是会报同样的错误, 这里误导了我好长时间啊)

第3个问题:使用mysql命令进入报错.

就是黄色边框里的错误,错误提示很明显需要mysql的登录帐号和密码,是自己对mysql 进入命令不熟啊。

用“mysql --user=username -p”这个mysql命令就可以进入了,如果你的mysql帐号是"root",使用的时候就“mysql --user=root -p”就可以了,按了"Enter"键就是提示输入密码,输入后即可进入mysql的世界。

还有另一中方法,输入”mysql -uroot -p“,更简单。

终于有了进一步学习实践的通行证了。哈哈!

3、get与post的区别

1. get是从服务器上获取数据,post是向服务器传送数据。

2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

建议:

1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;

2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

4、隐藏域

隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上。

隐藏域的优点

1、不需要任何服务器资源。

2、支持广泛,任何客户端都支持隐藏域。

3、实现简单,隐藏域属于HTML控件,无需像服务器控件那样有需要编程知识。

隐藏域的不足

1、具有较高的安全隐患。

2、存储结构简单。

3、如果存储了较多的较大的值,则会导致性能问题。

4、如果隐藏域过多,则在某些客户端中被禁止。

5、隐藏域将数据存储在服务器上,而不存储在客户端。

注意,如果开发中,页面的隐藏域过多,这些隐藏域被存储在服务器。当客户端浏览页面的时候,会有一些防火墙扫描页面,以保证操作系统的安全,如果页面的隐藏域过多,那么这些防火墙可能会禁止页面的某些功能。

5、diranme()函数

string dirname ( string $path )

给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。在Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。Example #1 dirname() 例子

$path = "/etc/passwd";

$file = dirname($path); // $file is set to "/etc"

?>

6、php时差

关于php时区错误问题[转载]2006-08-25 14:01前几天发现一个问题 date("Y-m-d G:i T",time()) 取出来的时间和本地时间老差8个小时,可我的系统明明是中国标准时(GMT+8),最后终于找到了问题所在:

原来从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的也就是显示的时间(无论用什么php命令)都是格林威治标准时间

和我们的时间(北京时间)差了正好8个小时,有以下3中方法可以恢复正常的时间。

1,最简单的方法就是不要用php5.1以上的版本

2,如果一定要用,而且不能修改php.ini,则需要在关于时间的初始化的语句的

上面加上 date_default_timezone_set (XXX);

3,一劳永逸,仅限能修改php.ini。打开php.ini查找date.timezone 去掉前面的分号= 后面加PRC,重启http服务(如apache2或iis等)即可

关于XXX,大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)

港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)还有新加坡:Asia/Singapore

老外好像把北京漏调了其他可用的值是:Etc/GMT-8 ,Singapore ,Hongkong ,PRC PRC是什么?PRC是中华人民共和国啊-_-

以上都是我从php官方说明档里整理出来的GMT-8下面的地区,可能会有遗漏

你可以https://www.360docs.net/doc/5015188675.html,/docs.php上查到更多的地区

由于程序最后还是会把地名转为时区来计算,所以当你使用的不是内置的区域的时候,程序将自动使用格林威治标准时间。

7、mysql中创建新用户并授予权限

要创建好账号才可以分配权限。

mysql> CREATE USER chy@localhost IDENTIFIED BY '123456';

mysql> grant all on qyoa.* to chy@localhost;

mysql> GRANT ALL ON qyoa.* TO chy@localhost INDENTIFIED BY "123456";

运行成功!

如果没有创建用户帐号,直接执行

mysql> grant all on qyoa.* to chy@localhost;

会用如下错误信息

ERROR 1133(42000) can 't find any matching row in the user table

--------------

或许是我本机的设置有问题吧,今天再执行

mysql>GRANT ALL ON qyoa.* TO chy1@localhost identified by "123456";

又可以正常执行了,搞不懂什么原因。难不成真的是我人品问题?

但将语句改成如下执行又出现问题:

mysql> grant all on qyoa.* to chy@localhost;

ERROR 1133(42000) can 't find any matching row in the user table

翻查MYSQL手册得到如下资料:

”SQL服务器模式

模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查。你可以用SELECT @@sql_mode语句查询当前的模式。

·NO_AUTO_CREATE_USER

防止GRANT自动创建新用户,除非还指定了密码。

你还可以在启动后用SET [SESSION|GLOBAL] sql_mode='modes'语句设置sql_mode变量来更改SQL模式。

设置GLOBAL变量时需要拥有SUPER权限,并且会影响从那时起连接的所有客户端的操作。设置SESSION变量只影响当前的客户端。

任何客户端可以随时更改自己的会话sql_mode值。“

原来是设定了sql 服务器模式。sql_mode值是保存在my.ini 中,可以直接打开该文件修改后再重启服务,也可以用

SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' 进行更改。

测试:

mysql>SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

后再执行

mysql> grant all on qyoa.* to chy@localhost;

创建空密码新账号成功!

8、使用encode加密数据库

注:依据经验,可以为永远都禁止查看的信息(如密码,也许还有用户名)使用SHA()函数。对于那些需要保护但往后可能需要查看的信息(如信用卡信息、社会安全编号、也许还有地址,等等),则可使用ASE_ENCRYPT()(或者MySQL旧版本上的ENCODE())。

mysql> use xp;

Database changed

mysql> create table encode(

-> id INT UNSIGNED NOT NULL AUTO_INCREMENT,

-> card_number TINYBLOB,

-> PRIMARY KEY(id)

-> );

Query OK, 0 rows affected (0.13 sec)

mysql> show tables;

+--------------+

| Tables_in_xp |

+--------------+

| encode |

+--------------+

1 row in set (0.00 sec)

mysql> INSERT INTO encode(id,card_number) V ALUES(NULL,ENCODE(123456,'salt')); Query OK, 1 row affected (0.08 sec)

或者使用AES_ENCRYPE()

mysql> INSERT INTO

encode(id,card_number) V ALUES(NULL,AES_ENCRYPE(123456,'salt'));

Query OK, 1 row affected (0.08 sec)

mysql> select * from encode;

+----+-------------+

| id | card_number |

+----+-------------+

| 1 | 罗匸8? |

+----+-------------+

1 row in set (0.05 sec)

mysql> select id,decode(card_number,'salt') from encode;//AES_DECRYPE()

+----+----------------------------+

| id | decode(card_number,'salt') |

+----+----------------------------+

| 1 | 123456 |

+----+----------------------------+

1 row in set (0.00 sec)

mysql> select id,decode(card_number,'salt') AS cn from encode;

+----+--------+

| id | cn |

+----+--------+

| 1 | 123456 |

+----+--------+

1 row in set (0.00 sec)

9、salt 的加密

可以把salt存储在数据库的一个表中,并把这个值赋予给用户建立的变量。mysql> TRUNCATE TABLE encode; //清空encode 表

Query OK, 0 rows affected (0.08 sec)

mysql> select * from encode;

Empty set (0.00 sec)

mysql> CREATE TABLE aes_salt(

-> salt V ARCHAR(12) NOT NULL

-> );

Query OK, 0 rows affected (0.14 sec)

mysql> INSERT INTO aes_salt(salt) V ALUES('gangze');

Query OK, 1 row affected (0.08 sec)

mysql> select * from aes_salt;

+--------+

| salt |

+--------+

| gangze |

+--------+

1 row in set (0.00 sec)

mysql> SELECT @salt:=salt FROM aes_salt; //把aes_salt表中的salt值,赋给变量@salt

+-------------+

| @salt:=salt |

+-------------+

| gangze |

+-------------+

1 row in set (0.00 sec)

mysql> INSERT INTO encode(card_number) V ALUES(AES_ENCRYPT(123456,@salt)); Query OK, 1 row affected (0.06 sec)

mysql> SELECT * FROM encode;

+----+------------------+

| id | card_number |

+----+------------------+

| 1 | 饈 慛蚉| 岅嵁? |

+----+------------------+

1 row in set (0.00 sec)

mysql> SELECT id, AES_DECRYPT(card_number,@salt) AS cn FROM encode;

+----+--------+

| id | cn |

+----+--------+

| 1 | 123456 |

+----+--------+

1 row in set (0.00 sec)

10、$_FILE[…file_name?][…error?]

PHP文件上传$_FILES['file']['error']

Posted on 2010-11-24 19:49 PHP博客阅读(394) 评论(0) 编辑收藏引用网摘

PHP文件上传$_FILES['file']['error']从PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码。该代码可以在文件上传时生成的文件数组中的error 字段中被找到,也就是$_FILES['file']['error']。

UPLOAD_ERR_OK

其值为0,没有错误发生,文件上传成功。

UPLOAD_ERR_INI_SIZE

其值为1,上传的文件超过了php.ini 中upload_max_filesize 选项限制的值。UPLOAD_ERR_FORM_SIZE

其值为2,上传文件的大小超过了HTML 表单中MAX_FILE_SIZE 选项指定的值。UPLOAD_ERR_PARTIAL

其值为3,文件只有部分被上传。

UPLOAD_ERR_NO_FILE

其值为4,没有文件被上传。

UPLOAD_ERR_NO_TMP_DIR

其值为6,找不到临时文件夹。PHP 4.3.10 和PHP 5.0.3 引进。

UPLOAD_ERR_CANT_WRITE

其值为7,文件写入失败。PHP 5.1.0 引进。

注意: 以上值在PHP 4.3.0 之后变成了PHP 常量。

11、事务的用法

//创建accounts 表

mysql> CREATE TABLE accounts(

-> id INT UNSIGNED NOT NULL AUTO_INCREMENT,

-> name V ARCHAR(30) NOT NULL,

-> balance DECIMAL(10,2) NOT NULL DEFAULT 0.0,

-> PRIMARY KEY(id)

-> )ENGINE=InnoDB; //选择的数据库引擎为InnoDB(支持事务)

Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO accounts(name,balance) V ALUES('Jack Baul',1234.00), -> ('Green Tom',2345.22),

-> ('Jean Red',456.10);

Query OK, 3 rows affected (0.05 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1234.00 |

| 2 | Green Tom | 2345.22 |

| 3 | Jean Red | 456.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

//开始事务start transaction

mysql> START TRANSACTION;

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1234.00 |

| 2 | Green Tom | 2345.22 |

| 3 | Jean Red | 456.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

mysql> UPDATE accounts SET balance=(balance-100) WHERE id=2; Query OK, 1 row affected (0.14 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> UPDATE accounts SET balance=(balance+100) WHERE id=1; Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1334.00 |

| 2 | Green Tom | 2245.22 |

| 3 | Jean Red | 456.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

//回滚操作rollback

mysql> ROLLBACK;

Query OK, 0 rows affected (0.17 sec)

//结果显示,回到原先的数据

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1234.00 |

| 2 | Green Tom | 2345.22 |

| 3 | Jean Red | 456.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

mysql> UPDATE accounts SET balance=(balance-100) WHERE id=2;

Query OK, 1 row affected (0.03 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> UPDATE accounts SET balance=(balance+100) WHERE id=1; Query OK, 1 row affected (0.05 sec)

Rows matched: 1 Changed: 1 Warnings: 0

//提交事务,并确认结果,回滚将没有作用

mysql> COMMIT;

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1334.00 |

| 2 | Green Tom | 2245.22 |

| 3 | Jean Red | 456.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

mysql> ROLLBACK;

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1334.00 |

| 2 | Green Tom | 2245.22 |

| 3 | Jean Red | 456.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

mysql> START TRANSACTION;

Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE accounts SET balance=(balance-200) WHERE id=3; Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> UPDATE accounts SET balance=(balance+200) WHERE id=1; Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1534.00 |

| 2 | Green Tom | 2245.22 |

| 3 | Jean Red | 256.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

//设置保存点savepoint

mysql> SA VEPOINT saveponit_name;

Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE accounts SET balance=(balance-200) WHERE id=2; Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> UPDATE accounts SET balance=(balance+200) WHERE id=1; Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1734.00 |

| 2 | Green Tom | 2045.22 |

| 3 | Jean Red | 256.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

//回滚到保存点

mysql> ROLLBACK TO SA VEPOINT saveponit_name;

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM accounts;

+----+-----------+---------+

| id | name | balance |

+----+-----------+---------+

| 1 | Jack Baul | 1534.00 |

| 2 | Green Tom | 2245.22 |

| 3 | Jean Red | 256.10 |

+----+-----------+---------+

3 rows in set (0.00 sec)

mysql> good!

php程序员简历模板

php程序员简历模板 php程序员简历模板一 年龄:21学历:大专 专业技能 核心语言: 熟练应用PHP+MySQL技术,能在WAMP环境下熟练编程。 理解对于Web网站开发的安全性要求,例如防SQL注射、令牌加密等技术。 理解Web开发流程,具有OO思想,能独立开发网站。 框架技术: 熟练使用smarty模板引擎技术,TP框架开发网站。 对三层结构、MVC的开发(设计模式)有较好的理解。 数据库: 熟练应用MySQL、SQLServer2005数据库,以及使用SQL语言。 前台展现: 熟识HTML、XHTML网页技术,能熟练应用DIV+CSS样式布局设计出符合Web2.0的页面,熟练应用JavaScript、Ajax技术实现对于客户端的脚本验证,能够熟练使用Jquery类库实现对页面即点即改等功能。 开发工具: 能够使用ZendStudio-5.5.0等PHP开发工具。 掌握PhotpShop、Dreamweaver网页开发工具的使用。

熟悉php168,Ecshop二次开发工具的使用。 项目经验 人事管理系统(应用程序) 软件环境:WAMP 编程工具:EditPlus 责任描述:组内讨论需求分析以及数据建模,功能独立开发完成 项目描述:无论对于大型公司,中小型公司,都避免不了对员工的管理,对于每个公司的管理者,在任何方面都需要一个既提供标 准有提供管理的系统;对于公司的员工也希望能够了解自己的表现及 在公司的职位、职责; 让公司对员工的管理更方便,通过本系统能有效地管理工资发放、员工的考勤动态 还可实现员工的自我查看和管理;以提高公司的执行效率和经济 效益。 项目感想:该项目主要应用了smarty+Ajax等技术由于php是一种弱的语言,并不能实现面向对象的多态(重载),所以只是用到了 面向对象的编程思想。在开发的过程中也使我更加熟悉基于 Smarty+CMS的开发模式。 天元茶叶网(168二次开发) 软件环境:WAMP 开发工具:ZendStudio-5.5.0 项目描述:本次开发运用的是php168v6版本的二次开发! 这个版本主要是标签的使用,它实现了内容与设计的结合!方便 快捷 本次开发的是茶叶网,实现了php168v6版本的功能

PHP程序设计习题答案

第1章PHP开篇 习题 一、填空题 1.Apache的httpd服务程序使用的是【80 】端口。 2.在进行软件开发时有两种基本架构,B/S架构和【C/S 】架构。 3.URL的英文全称是【Uniform Resource Locator】,中文名称为【统一资源定位符 】。 4.【HTTP 】协议是计算机硬件与软件之间数据交换的格式。 5.【HTTP】表示传输数据所使用的协议,【WWW】表示要请求的服务器主机名。 二、判断题 1.使用PHP写好的程序,在Linux和Windows平台上都可以运行。(√) 2.PHP可以支持MySQL数据库,但不支持其它的数据库。(×) 3.PHP有很多流行的MVC框架,这些框架可以使PHP的开发更加快捷。(√) 4.Zend Studio是PHP中常用的IDE(集成开发环境)。(√) 5.进行PHP程序开发时,可以借助软件和工具来提高效率。(√) 三、选择题 1.下列选项中,不是URL地址中所包含的信息是( D )。 A. 主机名 B. 端口号 C. 网络协议 D. 软件版本 2.PHP是一种( A)的编程语言。 A. 解释型 B. 编译型 C. 两者都是 D. 两者都不是 3.PHP是个网站开发中非常流行的脚本语言,其流行的原因不包含( C )。 A. 易学 B. 易用 C. 易调试 D. 易扩展 4.PHP与Linux、Apache和MySQL一起共同组成了一个强大的Web应用程序平台,下 列选项中为该平台简称的是(B )。 A. WAMP B. LAMP C. LNMP D. WNMP 5.在下列选项中,哪些不属于PHP的突出特点( B )。 A开源免费 B. 开发成本高 C. 跨平台性 D. 支持多种数据库 四、简答题 1.请简要说明PHP的突出特点是什么? 1.开源免费2跨平台性3.面向对象 4.支持多种数据库 5.快捷性.

第7讲:mysqli扩展库(面向对象、面向过程)

mysqli 1.mysqli (mysql improve) mysql扩展库的增强版 2.mysql 与mysqli 的比较 ①mysqli 的稳定性和安全性,效率有所提高 ②mysqli 支持面向对象编程,同时支持为了照应老程序员,也提供了面向过程的编程风格。 3.mysqli 类:代表php和mysql数据库之间的一个连接。 4.mysqli操作mysql数据库的步骤 ①创建mysqli 对象//验证 ②操作数据库(发送sql) ③处理结果 ④关闭资源 5.实例:mysqli扩展库面向对象的方式操作数据库 connect_error){ //1111验证 die("失败".$mysqli->connect_error); } $sql="select * from words"; //2222222 发送指令 $res=$mysqli->query($sql); //33333333接受=发送的指令的返回结果while($row=$res->fetch_row()){ //3333对结果进行处理foreach($row as $key=>$val){ echo "--$val"; } echo "
"; } $res->free(); //44444 关闭资源 $mysqli->close(); ?> 注: 1.面向对象中,程序中的$res用于代表sql语句的执行结果 ①如果执行的事dml语句,则返回bool; ②如果执行的事dql语句,则返回查询结果mysqli_result 结果集对象。

PHP面向对象和PHP面向过程的优缺点评比

P H P面向对象和P H P面 向过程的优缺点评比 Revised by Petrel at 2021

PHP面向对象和PHP面向过程的优缺点评比 面向对象与面向过程在许多编程语言中只能使用二者之一来进行编程,但是PHP语言与其他编程语言有不同之处,那就是我们可以自由的选择或者将PHP面向对象和PHP面向过程二者混用。目前绝大多数PHP程序员使用面向过程的方式,因为解析Web页面本身就非常“过程化”(从一个标签到另一个标签)。在HTML中嵌入过程处理代码是很直接自然的作法,所以PHP程序员通常使用这种方式。 如果你是刚接触PHP,用PHP面向过程的风格来书写代码很可能是你唯一的选择。但是如果你经常上PHP论坛和新闻组的话,你应该会看到有关“对象”的文章。你也可能看到过如何书写面向对象的PHP代码的教程。或者你也可能下载过一些现成的类库,并尝试着去实例化其中的对象和使用类方法--尽管你可能没有真正理解这些类为什么可以工作,或者为什么需要使用PHP面向对象的方法来实现功能。 应该使用“面向对象”的风格还是“面向过程”的风格?双方各有支持者。像“对象是低效的”或“对象非常棒”这样的议论也时有耳闻。本文不尝试轻易判定两种方法的哪种具有绝对的优势,而是要找出每种方法的优缺点。 以下是PHP面向过程风格的代码示例: 以下是PHP面向对象风格的代码示例: myPrint(); > 如果你想了解一些“面向对象”的基本知识,请使用Google搜索,网络上有非常多精彩的文章。 谁像这样写代码? 为了理解为什么这个论题成为论坛上口水战的导火线,我们看一些每个阵营的比较极端的例子。我们看看“过程狂热”和“对象狂热”。看看他们的观点听起来是不是有点熟悉。 过程狂热 过程狂热曾在上课时被计算机教师批评,因为这种方法没有使用更加抽象的实现方式。而支持PHP面向过程者的观点“它可以工作!”并不能提高其编程水平和

PHP面向对象知识总结

面向对象知识: 1 你对面向对象的认识 2 什么是类?什么是对象?类和对象之间的关系? 类:类是具有相同属性和行为的一组对象的集合 对象:对象是实际存在的该类事物的每个个体,因而也称实例 类和对象的关系:类是对象的抽象,对象是类的实例 3 面向对象的3大特征 继承,封装,多态 4 怎么创建一个类的对象? 使用new 这个关键字创建对象 5 什么是构造方法(函数)?怎么定义?有什么样的特点? 构造方法(在OO中,函数被称为方法) 1 特殊的名称:__construct 2 在实例化对象时,自动被调用 3 在内存中划分了对应的内存空间区域 4 构造方法可以像普通方法一样,接收参数;这里的参数通常是用来初始化类中的属性的 5 构造方法不能重复定义,每个类当中有且只能有一个;如果不写相当于有一个默认的不带参数且没有任何执行语句的空函数 6 什么是析构方法(函数)?怎么定义?有什么特点? 析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。 __destruct() 析构函数,是在垃圾对象被回收时执行。 析构函数也可以被显式调用,但不要这样去做。 析构函数是由系统自动调用的,不要在程序中调用一个对象的虚构函数。 析构函数不能带有参数。 7 什么是封装?有什么作用?列举一些封装的实例 封装就是把对象的属性和行为结合成一个独立的相同单位,并尽可能隐藏对象的内部细节。 优点:信息隐蔽,封装即隐藏(目的:不能让别人随意修改信息)。 怎么实现封装? (1.访问修饰符(public、protected、private) (2.类 (3.函数方法 (4.文件 (5.文件夹 8 访问修饰符有哪3个?分别有什么作用、特点 public 公共的谁都可以用,也可以修改 protected 受保护的只有自己和后代可以使用和修改 private 私有的只有自己可以使用和修改 9 什么是继承?关键字是什么?有什么作用? 继承:扩展父类的内容,注意只能继承public和protected修饰的内容,而private 修饰的则不能继承 关键字:extends

PHP语言面向对象的内容

PHP语言面向对象的内容 PHP是一个知识容量很大的语言,下面为大家介绍关于PHP语言面向对象的内容,欢迎大家阅读! 类定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。 对象是类的实例。 成员变量定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。 成员函数定义在类的内部,可用于访问对象的数据。 继承继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。 父类一个类被其他类继承,可将该类称为父类,或基类,或超类。 子类一个类继承其他类称为子类,也可称为派生类。 多态多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

重载简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 抽象性抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。 封装封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。 构造函数主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。 析构函数析构函数(destructor)与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后"的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用释放)。

PHP复习资料

1、PHP的概念和PHP语言的优势。 一种应用广泛、功能强大的嵌入HTML中开放源代码的脚本语言。尤其适合 WEB 开发。特点:1.开放源代码、支持多种数据库,完全免费。 2.效率高:PHP消耗相当少的系统资源。 3.易学易用,功能强大。跨平台的。可以运行在UNIX、LINUX、WINDOWS下。 4.嵌入HTML:因为PHP可以嵌入HTML语言,学习起来并不困难。 5.PHP5是面向对象的。 优势:1.将程序嵌入到HTML文档中执行,执行效率比完全生成HTML标记的CGI要高; 2.在服务器端执行,充分利用服务器的性能 3.将用户经常访问的PHP程序驻留在内存中,其他用户再次访问时不需要重新编译程序,直接执行代码就可以。 2、PHP常用的嵌入方式 方法一:PHP标准结构, 方法二:PHP的简短风格, 注意:此方法需要在php.ini中去配置才能生效,开启 short_open_tag = on 方法三:PHP的script风格, 方法四:asp风格,<% … %> <% echo "Hi, I'm a PHP script!"; %> 注意:此方法需要在php.ini中去配置才能生效,开启 asp_tags = on 3、PHP的常量和变量 变量:变量的名称是对大小写敏感的,正确设置方法是$var_name=value,一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线,不能包含空格。PHP5开始,长格式的PHP预定义变量可以通过设置register_long_arrays来屏蔽。$_COOKIE,经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。 $_FILES,经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)。 $_ENV,执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。 $_REQUEST,经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。$_SESSION,当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用)。 REQUEST_METHOD,获得对应页面方法。如:get、post QUERY_STRING,获取对应页面的请求字符串。 DOCUMENT_ROOT,获得根目录。 HTTP_REFERER,链接到当前页面的前一页面的 URL 地址 REMOTE_ADDR,正在浏览当前页面用户的 IP 地址。用法:$_SERVER['QUERY_STRING'] 常量:标识符大写,大小写敏感,在程序脚本执行期间该值不能改变。可以用 define() 函数来定义常量,函数的第一个参数表示常量名,第二个参数表示常量的值。常量名遵循标识符命名规则;只能包含标量数据(boolean,integer,float 和 string) __LINE__,文件中的当前行号。

如何用php开发一个完整的网站

如何用php 开发一个完整的网站 1 PHPer 应具备的知识 (1) php 知识: php 语句(条件、循环),数组(排序、读取),函数(内部<实践>、构造),运算(数学、逻辑),面向对象(继承、接口、封装、多态);五条必须具备; 了解cookie 或者session 一种机制,了解一种模板操作机制和使用; 手头收藏一些好的常用类或方法,能提高我们开发的速度; 分页,上传,字符过滤,数据库操作,生成html ,文件操作等 (2) xhtml 知识: 掌握html ,dreamweaver 、常用标签,表格,分帧框,表单(重要),header 处理,了解GBK UTF8编码的区别,能读懂css 样式 (3) javascript 事件处理:(脚本调试比较麻烦) Window 对象、document 对象、location 对象、form 对象/表单的对象 (4) 数据库知识: SQL 语句“增删查改”,会使用一种sql 工具(phpadmin ,mysql ,administrator ) 2 PHP 开发的一般流程 (1) 尽量完整的需求方案,具体到功能上:信息点 … … a . 用户注册:用户名、密码、电话、邮箱、Email 、家庭住址; b . 用户类型:正常用户、审核、冻结; c . 新闻发布:新闻类型、发布人、发布时间; d . 新闻排版:支持图片上传、在线word 编辑、过滤非法词语; … … (2) 建模结构UML 流程图

可以通过UML工具建立专业的模或自己画一个简单的关系图; 重点:流程图 (3)建立数据库 a.建立的表名、字段名要与他的功能有关系,如state、regdate、hit b.根据结构建立数据库表,原则是不定项内容一定要分表 c.字段类型要考虑内容是否够用就好,选择适合的类型INT Varchar Date (4)设计THML文件和脚本的实现 根据模和数据库来设计页面是个很科学的方法,当然有的时候有人喜欢根据模型设计页面,数据库基于页面设计,都是可以的。 设计页面时要考虑到每个细节,包括提示消息页面,错误页面。 (5)PHP代码的书写 a.先建立底层结构和文件夹(如果是大型的网站同样设计一个文件UML) b.基础功能分类关联,以便今后代码引用 c.代码的书写,注意简洁性和函数的使用,内部函数能实现的尽量用内部函数 d.在部分关键位置加以代码注释 e.命名变量和常量时要按功能命名 (6)程序的测试和修正 a.对于发现的BUG不能就解决BUG而解决,要处于完整程序考虑。避免收之东隅失之桑榆; b.对于解决过的BUG一定要详细记录,以便日后更新; 注意:Step One 先建立底层结构和文件夹 3多人开发应注意些什么? 多人开发存在着一个很严重的问题就是多人同时修改和编辑同一个文件时产生的问题和冲突。这时候就需要我们使用一种叫做版本服务的软件来帮助我们解决这个问题。版本服务器有很多种,我们常见的有CVS、SVN… 功能: A.单个文件历史版本的记录和恢复 B.文件的锁定和更新 C.单个或多个文件程序之间的沟通 D.保护程序的安全性不受单个程序的误操作而丢失 多人开发还要注意每个程序员之间的分配合理性,前台程序和美工的沟通;

PHP 面向对象面试题

1. 写出php 的public、protected、private 三种访问控制模式的区别(新浪网技术部) public:公有,任何地方都可以访问 protected:继承,只能在本类或子类中访问,在其它地方不允许访问private:私有,只能在本类中访问,在其他地方不允许访问 相关题目:请写出PHP5 权限控制修饰符 private protected public 2. 设计模式考察:请用单态设计模式方法设计类满足如下需求: 请用 PHP5 代码编写类实现在每次对数据库连接的访问中都只能获得唯一的一个数据库连接,具体连接数据库的详细代码忽略,请写出主要逻辑代码(新浪网技术部)

面向对象题库——php阶段

选择题: 1、如何声明一个PHP的用户自定义类() A、 B、 < class Class_name{} >C、 < Function Function_name{} > D、 < Function Function_name(){} > 2、下面哪一项不是PHP中面向对象的机制( ) A、类 B、属性、方法 C、单一继承 D、多继承 3.如何让一个对象实例调用自身的该对象的方法函数"mymethod" ( ) A.$self=>mymethod(); B.$this->mymethod() C.$current->mymethod(); D.$this->mymejthod() 4.下面哪项是错误的( ) A.父类的构造函数与析构函数不会自动被调用 B.成员变量需要用public protected private 修饰,在定义变量时不再需要var关键字 C.父类中定义的静态成员 ,不可以在子类中直接调用 D.包含抽象方法的类必须为抽象类,抽象类不能被实例化 5.如果成员没有声明限定字符属性的默认值是( ) 中调用类文件中的this表示( )

A.用本类生成的对象变量 B.本页面 C.本方法 D.本变量 7.在PHP的面向对象中,类中定义的析构函数是在( )调用的 A.类创建时 B.创建对象时 C.删除对象时 D.不自动调用 8.以下是一上类的声明,其中有两个成员属性,对成员属性,对成员属性正确的赋值方式是( ) Class Demo { Private $one; Static $two; Function setOne ( $value ) { $this->one=$value; } } $demo=new Demo(); A.$demo->one="abc"; ::$two="abc"; ::setOne("abc"); d.$demo->two="abc"; 9.在PHP 5 的类的定义中,无法使用3P修饰的内容是( ) A.属性 B.静态方法 C.测量 D.方法 10.在PHP 5的类的定义中, 如果方法M1能够调用方法M2,但M2不能调用M1,那么M1和M2应该符合( ) 是静态方法而M1不是是静态方法而M2不是 和M2都是静态方法和M2都不是静态方法

《PHP面向对象程序设计》期末试卷B卷

广东创新科技职业学院期末考试试题(B 卷) 2018—2019 学年第二学期 考试科目:PHP 面向对象程序设计 (大作业 开卷) 院系____________ 班 级____________ 学号___________ 姓名__________ 题目: 使用PHP+HTML+CSS 等技术开发web 应用,自行设计一个交互式网站,主题不限。 比如以图书管理网站为例:页面包括用户注册、用户登录、图书管理网站首页、图书列表页面、图书详情页面、借阅页面等页面。 具体要求如下: 1、首页(index.php )显示自行设计的网站logo,最新图书列表,最流行图书列表,显示项包括:图书名称、图书图片、图书价格、出版时间,同时还在页面右上方显示“登录”和“注册”链接。 2、在首页上点击 “注册”,来到用户注册页面(register.php )实现注册。注册项包括:用户名、密码、性别、QQ 号、email 和年龄。 3、在首页上点击“登录”链接来到用户登录页面(login.php ),实现用户登录。 4、用户登录后转到图书列表页(list.php ),显示该网站的所有图书,显示项包括:图书名称、图书图片、图书价格、出版时间、图书详情信息(链接)。该图书右下角有“借阅”链接。 5、点击“借阅”链接,来到借阅页面(jieyue.php ),显示一些已经借阅图书的信息页面。 6、点击图书详情信息(链接)来到图书详细页面(detail.php ),在该页中显示某图书的详细信息,包括图书名次、作者、出版时间、价格、馆存数量、在馆数量、已借阅数量。 ………………………………..………………..密 ……………….……………………封 …………………………………………..线 …………….…………..……………

最牛的PHP简介

最牛的PHP简介 PHP是一种简单的,面向对象的,解释型的,健壮的,安全的,性能非常之高的,独立于架构的,可移植的,动态的脚本语言。PHP具有和JAVA类似的Class关键字。因为不需要虚拟机,以致速度比JAVA快5倍。PHP 正迅速变成一种标准的,多用途的,面向对象的脚本语言。PHP不仅可用来开发Web应用程序,也可以开发普通应用程序。 PHP是一种功能强大的脚本语言。PHP将击败PERL/Python并取而代之。PHP是下一代的PERL/Python脚本。PHP可以胜任任何PERL/Python做的工作,并且做的更多,更好,更简洁!! PHP是Hypertext Pre-Processor(超文本预处理器)的缩写,它是一种服务器端的HTML脚本/编程语言。PHP 语法上与C相似,可运行在Apache, Netscape/iPlanet, 和 Microsoft IIS Web 服务器上。PHP作为一种工具, 可以让你创建动态的Web页面。应用PHP的网页与常规的HTML页面并无二致,你可以用同样的方式来创建、编辑它们。PHP允许你直接在HTML文件里写入简单的脚本,这一点与javascript非常相似。而不同的是,PHP不依赖于浏览器,是服务器端的语言,而javascript 却是一种客户端的嵌在HTML中的语言。概念上,PHP与Netscape 的LiveWire Pro产品,Microsoft的ASP以及SunMicrosystem 的JSP相似。 PHP不仅可以用来创建Web应用程序,也可以用来开发普通的单机应用程序。 PHP的强劲之处在于: ·PHP是一项最优秀的技术。其它技术,如PERL,Python, Tcl, VB script, ASP 相对来说,都是陈旧低劣 的。即使是Java/JSP,也在PHP之下。 ·开放源码 ·广泛的数据库连接 ·大量的扩展库 ·作为一种多用途的脚本语言,比PERL,VB script, ASP, JSP都要优秀。 为什么选择PHP?因为PHP是最好的,原因如下: ·PERL“味道不好”,因为其程序不易阅读和维护,且不是面向对象的。把PERL忘了,转向

20个最常见的PHP面试问题

20个最常见的PHP面试问题 如果您想成为一名全职程序员,那么现在就是您的绝好机会–随着编程和脚本语言的日渐流行,各种世界知名的公司都在寻找编程和设计专家。这些公司通常准备提供高薪水和良好的工作条件,因此也就不足为奇了,很多人都在试图找到这份工作!由于PHP是更流行的脚本语言之一,因此它是更好的选择之一。但是,如果您想担任PHP专家,就必须做好准备–这就是为什么在本教程中,我们将讨论一些最流行的PHP面试问题。 在介绍了PHP面试问题和答案之后,我们将在面试之前讨论如何利用PHP练习。然后,我将为您提供一些一般性的提示和建议,以帮助您最大程度地获得工作机会。 PHP面试问题–简介 我们将从一些更基本的PHP面试问题开始,以便您可以体会面试开始的样子。之后,我们将过渡到一些更高级的PHP问题。总而言之,在本教程的最后,您应该对面试的方式有更好的了解。 问题1:什么是PHP? 在工作面试中可能会问到的第一个问题可能是“什么是PHP?”或“PHP代表什么?”。这里有些建议是你应该尝试用简单的答案,你可以回答-有没有必要脱落花式或无所不知的一切。您的潜在雇主可能会赞赏您可以用自己的语言解释一些困难的话题。 那么,PHP代表什么呢?嗯,首字母缩略词本身是从“个人主页”派生的-但是,更科学的答案可能是“超文本预处理器”。 PHP是一种开源脚本语言。不用说,它是世界上最受欢迎的脚本语言之一-如果不是这种情况,您就不会读本教程。 PHP最常用于Web开发。该语言之所以受到人们的喜爱和赞赏是因为它可以轻松地嵌入到HTML中。 问题2:什么是PHP“ PEAR”? PHP PEAR是PHP语言本身的扩展。首字母缩写词代表“ PHP扩展和应用程序存储库”。 PEAR通常由经验丰富的程序员使用-除了标准的PHP版本,它还提供更多的选项和功能。 问题3:PHP的用途是什么? PHP有很多常见用途。仅举几个: 它可以创建,写入,关闭系统文件。 它可以加密数据或阻止人们访问您网站的某些部分。 它常与Cookie配合使用-您可以根据需要进行修改和设置。 问题4:有多少受支持的PHP版本? 当前,有四个版本的PHP – PHP 5.6 ; PHP 7 ; PHP 7.1和PHP 7.2。

PHP面向对象的程序设计总结(整理版)

第8章_PHP面向对象的程序设计 1.面向对象的概述 (2) 2.构造方法和析构方法 (2) 3.封装性 (3) 对成员属性封装使用的魔术方法:__set()、__get()、__isset()、__unset() (3) 4.继承性 (4) 5.常见的关键字和魔术方法 (5) Final关键字 (5) Static关键字 (5) Const关键字 (6) 单态设计模式: (6) Clone魔术方法 (7) __toString()魔术方法 (7) __call()魔术方法 (8) __autoload()魔术方法 (8) 对象串行化 (8) __sleep()和__wakeup()魔术方法 (9) 6.多态性 (11) 抽象类: (11) 接口: (12)

1.面向对象的概述 面向对象的程序的最小单位是:对象 面向过程的程序的最小单位是:函数对象可以包含函数 对象由两部分组成:成员属性(变量,静态的)和成员方法(函数,动态的); 对象是通过类实例化出来的,所有面向对象的编程规则是: 先声明类---->实例化对象(创建对象)---->使用对象。 声明类:[一些修饰类的关键词] class 类名{ 类中成员(成员属性,成员方法); } 例如:class Person{ Private $name; Private $age; Private $sex; Function say(){}; Function eat(){}; } 实例化对象:$变量名=new 类名称([参数类表]); 例如:$p1=new Person; 对象类型在内存中的分配: 内存分为四个部分:栈空间段,堆空间段,数据段和代码段 栈:存放对象的地址。 堆:存放可变长度的数据:字符串,数组和对象 数据段:存放初始化变量,全局变量等 代码端:存放执行文件的操作指令(函数) 对象中的成员访问: 赋值:$引用名->成员属性=值; 获取:echo $引用名->成员属性。 调用成员方法:$引用名->成员方法。 $this代表本对象。 2.构造方法和析构方法 构造方法:是对象创建完成后第一个被对象自动调用的方法。 析构方法:是对象被销毁前自动调用的方法 构造方法的作用:为成员属性初始化。 Function __construct([参数列表]){ //构造方法名称是以两个下划线开始的__construct(); 方法体; } 析构方法: Function __destruct(){ //析构方法名称是以两个下划线开始的__destruct(); 方法体; }

PHP面向对象理解

PHP面向对象的理解 面向对象的思想,既把一系列事物(可以抽象看作一个个体,或者一种类型)的属性,操作看作是一个对象,将其封装为一个类,内部包含这个抽象概念相关的一些属性及相关操作(方法)。 php面向对象的三大特征:封装,继承,多态。 封装:既把一系列的属性,方法封装在一个类中,给每个属性添加public,protected,private,关键字修饰可以使得这些属性不能被外部轻易访问。 private:只能类内部访问操作。 protect:受保护类型,用于本类及子类调用 public:权限最大,可以内部调用,实例调用,子类调用 __get();可以获取private属性(以及没有初始化的属性,比如不存在的) __set();可以设置private属性(以及没有初始化的属性,比如不存在的) __construct(): 实例化类对象的时候调用,当子类继承父类,子类实例化对象时会默认先调用子类的构造函数,如果希望调用父类的构造函数,则需要在子类的构造函数中通过parent::__construct();访问父类的构造方法,注意此处的关键字parent为小写,同时如果需要访问父类的方法,也可以采用parent关键字访问parent::父类方法名(或者采用父类名::方法名)。 __destruct(): 析构函数,创建对象后,令创建的对象,例如:$a=null.即可调用析构函数 继承:通过extends关键字可以继承父类的一些属性(public,protected修饰的),private修饰的变量可以被继承下来,但是无法被访问。php中子类的继承是单继承的,但是可以继承多个接口。通过implement即可继承interface。 Trait关键字可以解决php单继承的问题,实现多重继承。 多态:多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果,由于php是弱类型语言,所以不同于java,c++不存在重载(既同一函数名,不同类型参数,不同个数的参数),但是自php5后出现了一个魔术方法__call。 __call()的作用:当访问不存在的类方法时,调用该方法。 例如: Class A{ //name :调用的方法名字。args:参数列表 function __call($name,$args){ //计算传入的参数个数 $num=count($args);

笔记(php面向对象)

面向对象 1)类简单介绍 ①类包括:属性与方法 ②操作:实例化---->访问方法、访问属性 ③访问类型:类外访问、类内访问 所有语言的类都离不开以上三点,只不过是不同语言其表达形式不同而已 按照某个方法,能制造出一个衣柜 类相当于一个方法,按照这个方法就可以制造出一个对象了 如何用类来产生对象? New 类名()--返回的是对象Object,而对象里全是属性及属性值(没有方法) 2)属性值定义问题 不能是:表达式1+2的值 不能是:函数返回值如time() 3)类中的函数名的命名问题

另外:类内的函数名与类外的函数名相同也是没问题的 4)构造函数: __construct( ) 在类实例化时,即new一个对象时,自动调用构造函数 构造函数传参,并影响对象 5)析构函数 只要调用了对象,那么在对象销毁时,便自动执行 对象默认是引用传值的(重要) 6)对象销毁机制

7)对象作为参数 问题来了? 类的一个权限控制bug: 所有对象<----> 以类为单位( 多对1 ) 把一个对象作为另一个对象的参数传进类里使用了,造成了混淆,也不符合逻辑; 对象通常是调用其方法,而不应该作为参数,而且每一个对象对应一个类内容,而不应该能修改另外一个对象的内容,每个对象只能是修改自己的; 下面例子就是a对象作为b对象的参数了,通过b修改了a的内容 面向对象三大特性:封装、继承、多态 ①权限修饰符 作用:用来说明属性/方法的权限特点,写在属性/方法前面 ②三种类型 private---私有的:只能在类内调用 protected---保护的:可在类内和子类中调用 public ---公共的:在任何地方都可以

php面向对象之抽象类、接口

php面向对象之抽象类、接口 抽象类 为什么设计抽象类这个技术? 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"; 接口

相关主题
相关文档
最新文档