通过上一篇的学习, 相信童鞋们已经大概了解了 PHP 的变量和数组, 这篇虽然叫进阶语法, 但其实也还是基础语法, 只是为了和上一篇做一个区别.(在编程界再怎么高级的东西始终会在时间的车轮下变成基础)
本节主要讲解 PHP 的运算符, 函数和面向对象.
依照上一节的特性, 一些太简单的如 b+$c; 这种基础操作就跳过了, 我们主要来讲讲 PHP 的一些骚操作.
一, 运算符
大部分现代编程语言的运算符在 PHP 都实现了, 这里主要讲解一下弱类型语言特有的 "==" 和 "===" 运算符.
在强类型语言中一般只有 "==" 这种运算符, 那么为什么弱类型语言会需要 "===" 运算符呢?
这是因为在弱类型语言, 如 PHP 中, 当数字 0 和字符串 "0" 相比较的时候, PHP 会自动的把字符串转换为数字再进行比较, 也就是说 0=="0" 会返回 true.(课外题: 数字和字符串比较的时候, PHP 是按什么规则来进行字符串的数字转换?)
但是某些场景下, 我们除了进行数字比较以外, 还需要精确的类型比较, 这种时候就需要 "===" 运算符来处理了, 使用 "===" 运算符 PHP 会先校验两边变量的类型, 如果类型不相同则会直接返回 false.
同理, 判断不等于也有 "!=" 和 "!==" 两种比较运算符.
课后习题:
- FALSE=="";
- 0=="0abc";
- 0=="0123";
- 0==0.0;
- 0==[];
- "0abc=="";
- ''=="";
如果这些能做到全对, 那么这关你就跨过去了, 需要答案的童鞋可以在公众号给赵童鞋留言哦.
二, 函数
在 PHP 中, 所有函数都需要使用 function 关键字来标识.
如:
- function fun(){
- echo "HelloWorld!!!";
- }
在类里的方法则自带了 $this 变量, 用来指示当前调用方法的对象.(课外题: 童鞋们还记得之前讲解的函数和方法有什么区别吗?)
在许多编程语言中, 方法调用都是使用 "." 符号来完成的.
如:
this.sayHello();
但在 PHP 中,"." 运算符已经被用作字符串连接符了, 所以需要使用 ->符号来进行方法的调用, 这个符号是不是非常形象 (简单粗暴) 呢?
如:
$this->sayHello();
在函数这里我需要着重讲解一下, PHP 中两个常用的内置函数 empty()和 isset().
有许多刚入门 PHP 的童鞋可能会经常搞混这两个函数的使用区别.
首先是 empty()函数的官方解释:
当 var 存在, 并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的东西被认为是空的:
- "" (空字符串)
- 0 (作为整数的 0)
- 0.0 (作为浮点数的 0)
- "0" (作为字符串的 0)
- NULL
- FALSE
- array() (一个空数组)
- $var; (一个声明了, 但是没有值的变量)
然后是 isset()函数的官方解释:
如果 var 存在并且值不是 NULL 则返回 TRUE, 否则返回 FALSE.
可能有童鞋看完解释还是一头雾水, 其实他们的区别就是对于 NULL 值的判断.
当我们需要判断一个变量是否已声明但值为空的时候, 就可以用 empty()函数来判断.
当我们需要判断一个变量是否未声明或值为 NULL 的时候, 就可以用 isset()函数来判断.
三, 面向对象
PHP 的面向对象又是那些什么继承啊, 多态啊, 父类啊, 子类啊, 为什么这么累啊的东西, 和大部分编程语言的一样, 我就不写了.
上面只是开玩笑的, 面向对象是目前编程语言的一个趋势, 甚至 JavaScript 在 ES6 之后也支持了 Class 的写法.
但是直接来讲面向对象我个人觉得是非常枯燥的一件事情, 而且对一个初学者讲构造函数, 析构函数, 继承, 多态之类的东西会很容易绕晕, 更多数的情况是只有 "哦~ 原来这样, 然后呢?" 这种体会, 没两天就忘光光了.
所以我认为面向对象这方面如果是有其他语言经验的童鞋, 应该不太需要再重头学一遍, 而初学者的话我们在后面结合项目再来讲解就会更加容易理解, 而且体会也是完全不一样的.
四, 小结
PHP 的语法讲解经过两个章节算是基本讲完了.
什么? 你说就这么短? 许多的教程语法都要讲四五节课以上?
那是很正常的, 因为赵童鞋跳过了大量的细节, 我认为入门一个新的知识应该只花 20% 的时间来学习 80% 经常用到的知识才是最高效的, 大量的细节我们在后面再来慢慢补充.
什么? 你觉得自己什么都没学到?
那也是很正常的, 能过目一遍就全部理解全部掌握的人始终是非常少数的, 许多知识都要经过大量的练习才能真正的领悟到.
后面的章节我们就直接进入到框架的学习.
来源: https://juejin.im/post/5c1f2dd5e51d45687904d6a4