鱼C论坛

 找回密码
 立即注册
查看: 3479|回复: 15

[技术交流] 【php包教不包会系列4】php基础知识概览

[复制链接]
发表于 2017-2-19 06:58:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 mumudontcry 于 2017-3-9 00:52 编辑

前情提要
前几天发了关于 PHP 的教程系列 “php包教不包会系列” ,除了第一篇开篇大家兴致很高,似乎后面的都没有怎么热情,这是情理之中的
因为……
众人:一上来你就弄那么难的你是要闹哪样啊!
那么今天先简单回顾一下上三期的内容
然后是关于这个系列的教程发布,因为我发现确实小伙伴们对 PHP 感兴趣(众人:你是怎么看出来的喂!),但是我这种没有规律的更新(上个星期一天上午更新了三篇,然后消失了一个星期,其实去看你们回复了),可能让人没法学习下去,那么
本教程一个星期 3 期,会在晚上偶数星期 10 点之前发出
如果因为本人有事没有更新或者忘了更新,那么最迟会在星期六或者星期天把这周应该上的补上
每期都会有练习,请一定要自己完成(毕竟我不检查)
还是那句话,喜欢的小伙伴记得打赏 (我真凑不要脸)
那么下面我们就开始真正步入 PHP 的世界吧
PHP 总览
建议使用 PHP5.6 去学习,甚至是 7,目前 PHP 最新的是 7,5 系列最高版本是 5.6,没有 PHP6,因为,夭折了
这里我们约定:
…code…表示这是一段 PHP 代码,但是不重要,因此省略
基本内容
PHP 标记
当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略
PHP 也支持其他标记,但是!由于各种原因和理由,请只使用“<?php ?>”
  1. <?php

  2. echo 'hello world';
  3. ?>
复制代码
另外,如果一个文件是一个纯 PHP 文件,请省略结束标记,否则可能导致一些预想不到的结果!之后的代码示例中,如果是纯 PHP 代码,我也不再写结束标记
出于一个良好的习惯,请在开始标记后加一个空行,这里的代码都是这样格式
注释
PHP 支持行注释和块注释
行注释: //
块注释:/* …code… */
类型
PHP 支持 8 种原始数据类型
四种标量类型:布尔型、整型、浮点型、字符串
两种复合类型:数组、对象
两种特殊类型:资源、null
  1. <?php

  2. // 布尔型:true 和 false
  3. $var = true;
  4. // 整型
  5. $var = 1;
  6. // 浮点型
  7. $var = 3.14;
  8. // 字符串
  9. $var = 'girl friend';
  10. // 数组
  11. $var = [true, 1, 3.14, 'girl friend'];
  12. //对象
  13. class Test{
  14.   public $value = '';
  15. }
  16. $var = new Test();// 类Test的对象
  17. // 资源类型指文件、数据库等句柄,因此这里不举例
  18. // null
  19. $var = null;
复制代码
变量
PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的
一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线
如:$var 、 $_var 、 $_1 、 $var1 ……
不合法变量的例子: $1 、1 、 var ……
PHP 的变量是动态设置和使用的,这表示,你不需要像 java 等语言那样,需要使用一个前缀(或其他)的方式去声明一个变量的类型,而且,PHP 变量的类型是根据上下文语境去判定,因此上面关于类型的例子是可以成功执行的,$var 最终的值会变成 null
常量
常量是一个简单值的标识符(名字),常量默认为大小写敏感。传统上常量标识符总是大写的
下面这个出现在 C 语言的笑话,在 PHP 里是行不通的,所以,不要和蠢萌的新手开这种玩笑了,同时也建议,不要随便定义系统自带的值,因为常量一旦被定义,就无法重新定义!
  1. <?php

  2. define("TRUE", false);
复制代码
运算符
这一块和你认识的其他语言的运算符类似,比如 + 就是加法等等,这里只说明一些需要注意的,具体的在具体篇幅里会详细介绍
算术运算符:+,-,*,/,%(求余)
= 是赋值号,== 是等于号,=== 是全等于(会比较类型),等号还有类似的 != 和 !==
@ 是错误控制运算符,可以抑制之后的表达式产生的错误,不要依赖它,因为,耗性能以及让别人无法找出 bug
位运算符:& 按位与,| 按位或,^ 按位异或,~ 按位取反,<< 左移,>> 右移
逻辑运算符:and,or,not 或者 &&,||,!,请一定使用后者,前者可能导致一些问题
递增(减)运算符:++,–
字符串拼接: ‘hello’ . ‘world’
数组运算符:+联合,==等于,===全等于(会比较键值对顺序),还有类似的不等于!= 和 !==,用得不多,没有人用这种方式去比较数组,毕竟 PHP 函数很强大
类型运算符:instanceof
流程控制
if 语句
  1. <?php

  2. if (true) {
  3.   // 这个分支并不是一个笑话,你可以在注释某一段代码时使用,而且这种写法适用于所有的程序
  4. }elseif ( $var == 1) {
  5.   // == 是等于,在类型不一致时 PHP 会尝试强制转换
  6.   // 尤其注意数字的强制转换,PHP 会尝试把和数字比较的东西转换成数字去比较
  7.   // 因此 '1a' == 1 是成立的,a会被丢掉
  8. }else if ( 1 === $var ) {
  9.   // 基于 == 的不靠谱比较,请明确了解变量类型时,使用 === 代替 ==
  10.   // 并且让常量放在前面是一个好习惯,不会因为少写了等号变成赋值号而出现意外
  11. }else {
  12.   // 以上是关于 if 的需要注意的细节以及 if 流程控制的用法,我是不是太懒了
  13. }
复制代码
for 语句
for (expr1; expr2; expr3)
  1. <?php

  2. for ($i = 1; $i <=10; $i++){...code...}
复制代码
请不要在 for 循环的上面三个表达式当中写函数,因为每次循环都会执行一遍
如果要循环数组,最好使用 foreach
  1. foreach( $array as $key => $value) {}
复制代码
此外还有 while 和 do … while 循环,这个和其他语言是类似的,值得一提的是,在 PHP 的编程之中,使用 foreach 的频率最高,因为 PHP 的最终运算都是数组以及字符串(所以你看 PHP 的数组和字符串函数是不是特别多和强大)
可以使用 break 和 continue 跳过循环
switch 语句
  1. <?php

  2. switch($var) {
  3.   case 1:
  4.     ...code...
  5.     break;
  6.   case 2:

  7.     ...code...

  8.   default:
  9.     ...code...
  10. }
复制代码
include 语句
包含并运行指定文件
require 语句和 include 基本等价,暂时不用区分
include_once 以及 require_once 语句不会重复包含文件,这是和 include 以及 require 的区别
  1. <?php

  2. include 'test.php';
复制代码
其他
goto 语句、declare 语句
函数
  1. <?php

  2. function test($var1, &$var3, $var2 = 1) {
  3.   ...code...
  4.   return $result;
  5. }
复制代码
这是一个函数的定义,其中 $var1 是必填参数,$var2 带有一个默认值,是可选参数,必填参数不能放在可选参数之后
return 会返回一个函数的值
参数可以使用引用参数,如 $var3,这样你就可以带多个参数出来了,这种函数在 PHP 自带的函数里很常见
关于函数的内容,和其他语言类似,也有局部变量、全局变量、闭包等,这里暂时先不讨论
类与对象
每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义,类对大小写不敏感
一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)
  1. <?php

  2. class A{
  3.   public $var1 = 1;
  4.   protected $var2;
  5.   private $var3;

  6.   public function test(){}
  7. }
复制代码
当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用
  1. <?php

  2. class A{
  3.   ...code...

  4.   public function test(){
  5.     return $this->var2; // protected 属性 $var2 没有初始化,因此返回一个null
  6.   }
  7. }
复制代码
要创建一个类的实例,必须使用 new 关键字
  1. <?php

  2. ...code...
  3. $a = new A();
复制代码
一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类
  1. <?php

  2. class B extends A {
  3.   ...code...
  4. }
复制代码
命名空间
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径,用来解决名字冲突或者不好起名字的问题
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间
  1. <?php

  2. namespace MyTest;

  3. ...code...
复制代码
由于在我们在讨论 PHP 的时候,可能大多数情况都是讲网站,而如今 PHP 出现了大量的 web 框架,这些框架大多数也使用了命名空间(PHP 5.3 以下没有命名空间),而他们基本上都会一个 PHP 文件对应一个类,因此,我们给命名空间命名的时候基本遵循和类的名字一致,都是大驼峰写法
异常处理
  1. function inverse($num){
  2.   if ($num == 0) {
  3.     throw new Exception('错误:分母为0!');
  4.   }
  5.   return 1 / $num;
  6. }

  7. try {
  8.   echo inverse(2); // 返回 0.5
  9.   echo inverse(0); // 抛出异常
  10. } catch (Exception $e) {
  11.   echo $e->getMessage();
  12. }
复制代码
我们想要写一个计算倒数的函数,在函数里,我们必须自己判断分母是不是等于 0, 然后把异常抛出
末尾
到这里,PHP 的基本知识就大概讲了一遍,你在平时用的时候真的也就用这些,以及文中提到的数组和字符串函数,是不是发现根本就不需要多少时间就可以搞定?
PHP 的基础知识之后,你需要做的只是,谷歌百度,看 PHP 手册,实现功能,就这么简单
以上知识已经可以帮你实现一个什么斐波那契数列啊的数学问题了
下一期会详细开始讲解 PHP 的每一个知识点,希望还没有使用 Sublime 调试的童鞋赶紧行动起来,做好小笔记
我可以用我在江湖上鬼混这么多年的经验告诉大家,后面开始的每一期的内容,你不会在市面上见到任何系列的视频教程或者文字教程告诉你这些知识需要注意的地方或者彩蛋
本期作业:
你可以使用 var_dump 或者 echo 输出结果查看是否正确
运行代码
请运行上面出现的代码
…code… 表示代码的省略,真实执行时请用对应代码或者注释掉,以后不再赘述
有问题及时反馈给我
计算1到100的和
把答案告诉我,我不介意你们这样写:
  1. <?php

  2. echo 1 + 2 + 3 + ...code... + 100;
复制代码
写一个生成斐波那契数列的函数func
  1. <?php

  2. function func(...code...){
  3.     ...code...
  4. }
复制代码
不会的看手册以及百度
另外安利一下我的 github 项目,里面有好多 PHP 的题目以及答案,你们可以自己去尝试一下
传送门:https://github.com/forsona/codewarsKata

#################### 华丽的 PHP 版分割线 ####################


如果喜欢木木的讲解,就点击下方的订阅(读作:打赏),给木木点个赞吧,欢迎大家提出建议或者指正

一块钱买不了皮肤,买不了香烟,却可以跟着木木一起打怪升级,并给木木巨大的支持,有了大家的力量,木木就可以制造元气弹,打败……嗯,买一个好一点的女朋友啦

评分

参与人数 2荣誉 +25 鱼币 +25 贡献 +15 收起 理由
hldh214 + 20 + 20 + 10 全部给你!
~风介~ + 5 + 5 + 5 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-19 18:43:53 | 显示全部楼层
慢慢养肥再看......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-19 18:48:08 | 显示全部楼层

←_←
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-21 09:04:52 | 显示全部楼层

你们需要什么样的教程,有没有建议
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 09:22:16 | 显示全部楼层

慢慢养肥,在来’玩‘
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 09:48:14 | 显示全部楼层
mumudontcry 发表于 2017-2-21 09:04
你们需要什么样的教程,有没有建议

直接上项目,然后怎么支持中间件部署....etc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-21 11:35:59 | 显示全部楼层
~风介~ 发表于 2017-2-21 09:48
直接上项目,然后怎么支持中间件部署....etc

-。-额,一下子就跳这么多,你要是想了解,我们可以单独讨论一下的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 14:07:52 | 显示全部楼层
mumudontcry 发表于 2017-2-21 11:35
-。-额,一下子就跳这么多,你要是想了解,我们可以单独讨论一下的

所以说先“养肥”一段时间嘛~楼主加油哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 15:38:19 | 显示全部楼层
楼主有兴趣和我一起建设一个中文 phalcon 资讯站吗
类似 laravel 的 http://www.golaravel.com/ 以及 http://laravelacademy.org/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-21 19:55:52 | 显示全部楼层
hldh214 发表于 2017-2-21 15:38
楼主有兴趣和我一起建设一个中文 phalcon 资讯站吗
类似 laravel 的 http://www.golaravel.com/ 以及 http ...

我没有接触过这个,而且你有没有做的大概的方向
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-21 19:58:39 | 显示全部楼层
~风介~ 发表于 2017-2-21 14:07
所以说先“养肥”一段时间嘛~楼主加油哦!

有道理~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 21:01:29 | 显示全部楼层

大佬加油,小的明天给你推推~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-21 21:32:28 | 显示全部楼层
~风介~ 发表于 2017-2-21 21:01
大佬加油,小的明天给你推推~

今晚发新内容,还有半小时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 22:09:58 | 显示全部楼层
mumudontcry 发表于 2017-2-21 21:32
今晚发新内容,还有半小时

老司机后面再介绍点源代码审计的内容就好了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-22 08:55:24 From FishC Mobile | 显示全部楼层
这里有些建议:
1、养成良好习惯,比如对用户输入的数据过滤,配置里禁止危险函数,不使用mysql类函数,用pdo代替等
2、留心相关知识,比如 PHP 一句话木马,多去关注安全的博客或文章,比如可以去开源中国
3、利用工具去扫描危险漏洞,比如使用webshellkill(d盾),这个工具……会用360的都会用,而且很强力
4、使用框架,框架的好处不仅仅是开发效率,还有安全,不懂英文的小伙伴可以考虑 ThinkPHP 入门
5、其他知识的学习,比如设计模式,这些可能和安全没多少关系,但是一个良好的代码结构,可以让别人很好理解问题,查找问题(三个月后,在你看不懂你自己代码时,你也变成了别人),这些东西也都不是一蹴而就的,不过记住两点最基本的原则,基于这两个原则,我们可以找到相关知识去了解:
用户输入都是不安全的(怎么处理用户数据)
进入函数的变量都是不安全的(有哪些函数需要注意的)
不过我觉得你提的很好,我也没有系统学过这些东西,也是在学的过程中慢慢积累,起码有一点我可以保证,我会尽可能把自己的代码写的易懂,这样即使代码审核(或者别的)我做不了,起码别人会轻松一点,这一点在任何时候都是通用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-30 20:38:44 | 显示全部楼层
向楼主致敬,同时问问:
'$this 是一个到主叫对象的引用'
this关键词我一直都很不理解,读这句话的时候读了很多遍都没懂,希望楼主能给我稍微解释一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 10:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表