目录
PHP类型比较
PHP 常量
设置 PHP 常量
PHP 字符串
并置运算符
strlen()函数 长度
strpos()函数 查找子字符串位置
完整的 PHP String 参考手册
PHP 运算符
算数运算符
赋值运算符
递增递减
比较运算符
逻辑运算符
数组运算符
IF-ELSE and Switch
PHP 数组
数组排序
PHP 超级全局变量
PHP 循环
PHP 函数
PHP 魔术常量
PHP 命名空间
定义命名空间
命名空间使用
PHP 面向对象
定义
创建对象
构造函数
析构函数
继承extend
实例
方法重写
访问控制
接口
常量
抽象类
静态
Final关键字
调用父类构造方法
PHP 命名空间
定义命名空间
命名空间使用
PHP 面向对象
定义
创建对象
构造函数
析构函数
继承extend
实例
方法重写
访问控制
接口
常量
抽象类
静态
Final关键字
调用父类构造方法
前言:
本文是作者在学习过程中根据runoob写的笔记,当然在过程中加入了一些自己的思考(比如和Java和C的横向对比)
指路: PHP 教程 | 菜鸟教程
注 : 最神奇的是负数在php里面boolean(负数) 得到的是true
常量是一个简单值的标识符,在脚本中将无法再改变
由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注:常量在整个脚本中都可以使用。
define 定义常量
常量的使用不能在常量名前添加 $ 符号,否则会当作一个全新的未定义变量使用
$st = "hello, world!";
echo $st;
?>
返回字符串的长度
提示:strlen() 常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)
PHP 5 String 函数 | 菜鸟教程
加减乘除和模没什么好说的
特殊的有 : 设置负数,取反,并置,整除
取反:按二进制进行取反
并置:连接两个字符串 使用 .
整除 : intdiv() 向下取整,第一个参数除与第二个参数
-x |
设置负数 |
取 x 的相反符号 |
|
-2 |
~x |
取反 |
x 取反,按二进制位进行"取反"运算。运算规则: |
|
-3 |
a . b |
并置 |
连接两个字符串 |
"Hi" . "Ha" |
HiHa |
没啥好说的,和java几乎一样
,除了并置运算
...也一样,写在前面就是先运算再返回,写在后面就是先返回值再运算
比较特殊的有 === 绝对等于(除了比较值,还得比较类型), <>(和!=一样,不等于)
!== 不绝对等于(x!=y || gettpye(x) != gettype(y))
跳过了,和其他语言一样
PHP If…Else 语句 | 菜鸟教程
用array()创建数组
在 PHP 中,有三种类型的数组:
获取数组的长度 -- count()
遍历数值数组
php关联数组 (类似字典,map)
&age=array("Peter"=>"35" , "ben"=>"37","Joe"=>"43");
调用时 : $age['Peter']
遍历关联数组
r : 降序 a : 按照关联数组的值 k : 按照关联数组的键
PHP的冒泡排序
记不住,先放链接,要用的时候再看
PHP 超级全局变量 | 菜鸟教程
包括 while do-while for 和 foreach(重点)
按runoob上所述,PHP的真正威力就是函数,故将此章设为重点
PHP有超过1000个内函数(也就是库函数)
PHP 5 Array 函数 | 菜鸟教程
自己创建函数:
function 函数名($参数1,$参数2){
如果有返回值的话:return $返回值
}
变量函数(没见过)
预定义常量
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:
trait没太理解,感觉就像是附加上了一个东西
解决重名问题
PHP不允许两个函数或者类出现相同的名字
PHP 命名空间可以解决以下两类问题:
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。
以下代码会出现语法错误:
” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
分为三种情况:(其实和那种访问文件时用绝对地址和相对地址很像)
下面是一个使用这三种方式的实例:
file1.php 文件代码
file2.php 文件代码
注意访问任意全局类、函数或常量,都可以使用完全限定名称,例如 \strlen() 或 \Exception 或 \INI_ALL。
在命名空间内部访问全局类、函数和常量:
解析名称时遵循的原则
这部分略显臃肿,等工作了看看是否涉及的多,如果不多就先不管了
实例:
(与Java不同在于,命名似乎必须为__construct)
好像Java里压根没用过这个,C语言里倒是有,有可能是我学的太浅了(不过Java自带垃圾回收机制,个人猜测Object里就已经有自带的析构函数了,毕竟Object是Java所有类的父类)
__destruct(void){
}
PHP不支持多继承
这里runoob介绍的太简略了,有时间了需要重新看一下(也有可能PHP就是这么简单的语言)
PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
注:属性如果不设置(只有一个var声明),那么就默认为public 。 方法同理
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
(这和Java几乎一模一样)
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// 实现接口
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
注:这地方和C是相似的
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。
关键字:abstract
----以下内容来自菜鸟-----
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
关键字:static
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。
禁止子类重载方法的关键字
PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。
解决重名问题
PHP不允许两个函数或者类出现相同的名字
PHP 命名空间可以解决以下两类问题:
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。
以下代码会出现语法错误:
” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
分为三种情况:(其实和那种访问文件时用绝对地址和相对地址很像)
下面是一个使用这三种方式的实例:
file1.php 文件代码
file2.php 文件代码
注意访问任意全局类、函数或常量,都可以使用完全限定名称,例如 \strlen() 或 \Exception 或 \INI_ALL。
在命名空间内部访问全局类、函数和常量:
解析名称时遵循的原则
这部分略显臃肿,等工作了看看是否涉及的多,如果不多就先不管了
实例:
(与Java不同在于,命名似乎必须为__construct)
好像Java里压根没用过这个,C语言里倒是有,有可能是我学的太浅了(不过Java自带垃圾回收机制,个人猜测Object里就已经有自带的析构函数了,毕竟Object是Java所有类的父类)
__destruct(void){
}
PHP不支持多继承
这里runoob介绍的太简略了,有时间了需要重新看一下(也有可能PHP就是这么简单的语言)
PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
注:属性如果不设置(只有一个var声明),那么就默认为public 。 方法同理
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
(这和Java几乎一模一样)
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// 实现接口
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
注:这地方和C是相似的
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。
关键字:abstract
----以下内容来自菜鸟-----
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
关键字:static
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。
禁止子类重载方法的关键字
PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。