PHP基础知识——PHP学习笔记(一)
PHP表单处理——PHP学习笔记(二)
PHP进阶知识——PHP学习笔记(三)
PHP数据库——PHP学习笔记(四)
PHP接口实战教程——PHP+Mysql+ajax实现分页查询接口
PHP学习笔记(一)
PHP规范
PHP代码写在<?php?>
<?php
// 这里是PHP代码
?>
php注释
//单行注释
/*多行注释*/
pho输出
echo
可以输出一个或多个字符串,无返回值
只允许输出一个字符串,返回值总为 1
PHP变量
命名规范
1.变量名以 $ 符号开始,后面跟着变量的名称
2.变量名必须以字母或者下划线字符开
3.变量名只能包含字母数字字符以及下划线
4.变量不能有空格,变量区分大小写
创建php变量名
php不用申明变量,在第一次赋值的时候自动创建
局部作用域和全局作用域
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字在函数中调用全局变量
<?php
$x=1; // 全局变量
function test()
{
$y=2; // 局部变量
echo "函数中调用x的值为:$x";
echo "<br>";
echo "函数中调用y的值为:$y";
echo "<br>";
}
test();
echo "外部调用x的值为:$x";
echo "<br>";
echo "外部调用x的值为:$y";
echo "<br>";
?>
输出结果为:
函数中调用x的值为:
函数中调用y的值为:2
外部调用x的值为:1
外部调用y的值为:
<?php
$x=1; // 全局变量
function test()
{
global $x; // 局部变量
echo "函数中调用x的值为:$x";
echo "<br>";
$x=2;
}
test();
echo "外部调用x的值为:$x";
?>
输出结果为:
函数中调用x的值为:1
外部调用x的值为:2
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。
Static 作用域
当一个函数被完成时,局部变量会被删除,可使用Static关键字来保留局部变量
<?php
function test()
{
static $x=0;
echo $x;
$x++;
echo "<br>"; // 换行符
}
echo "第1次使用函数x为:";
test();
echo "第2次使用函数x为:";
test();
echo "第3次使用函数x为:";
test();
?>
输出结果
第1次使用函数x为:0
第2次使用函数x为:1
第3次使用函数x为:2
超级全局变量
变量名 | 描述 |
---|---|
$GLOBALS | $GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键 |
$_SERVER | $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目$_SERVER中的元素 |
$_POST | $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post” |
$_GET | \ $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“get” |
PHP常量
常量值被定义后,在脚本的其他任何地方都不能被改变
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
常量是全局的
设置常量
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
参数 | 描述 |
---|---|
name | 必选参数,常量名称,即标志符 |
value | 必选参数,常量的值 |
case_insensitive | 可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感 |
<?php
define("TEST", "不区分大小写",true);
echo TEST;
echo '<br>';
echo test;
?>
输出结果
不区分大小写
不区分大小写
魔术常量
常量名 | 注释 |
---|---|
__ LINE__ | 文件中的当前行号 |
__ FILE__ | 文件的完整路径和文件名 |
__ DIR__ | 文件所在的目录 |
__ FUNCTION__ | 函数名称 |
__ CLASS__ | 类的名称 |
__ METHOD__ | 类的方法名 |
__ NAMESPACE__ | 当前命名空间的名称(区分大小写) |
数据类型
函数返回变量的数据类型和值
var_dump()
类型 | 中文 | 注解 |
---|---|---|
String | 字符串 | 可放单引号和双引号中 |
Integer | 整型 | 十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0) |
Float | 浮点型 | 带小数部分的数字,或是指数形式 |
Boolean | 布尔型 | TRUE 或 FALSE |
Array | 数组 | 一个变量中存储多个值 |
Object | 对象 | 在 PHP 中,对象必须声明 |
NULL | 空值 | NULL 值表示变量没有值 |
<?php
$x = "hello"; //字符串
var_dump($x);
echo "<br>";
$x = 10;//整形
var_dump($x);
echo "<br>";
$x = 1.1;//浮点型
var_dump($x);
echo "<br>";
$x = true; //布尔型
var_dump($x);
echo "<br>";
$x = array(1,2,3); //数组
var_dump($x);
echo "<br>";
$y; //空值
var_dump($y);
?>
输出结果:
E:\WebProject\phptest\test.php:3:string 'hello' (length=5
E:\WebProject\phptest\test.php:6:int 1
E:\WebProject\phptest\test.php:9:float 1.
E:\WebProject\phptest\test.php:12:boolean tru
E:\WebProject\phptest\test.php:15:
array (size=3)
0 => int 1
1 => int 2
2 => int 3
E:\WebProject\phptest\test.php:18:null
字符串
1.字符串用 . 连接
2.strlen() 函数返回字符串的长度(字符数)
3.strpos("","") 函数用于在字符串内查找一个字符或一段指定的文本,如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE
<?php
echo strpos("Hello world!","world");
?>
输出6
数组
创建数组
1.自动分配 ID 键
$变量名=array("","","")
2.人工分配 ID 键
$变量名[0]=""
$变量名[1]=""
$变量名[2]=""
3.获取数组的长度
count() 函数用于返回数组的长度
4.关联数组
$变量名=array(“key”=>“value”,“key”=>“value”,“key”=>“value”);
or
$变量名[key]=“value”
$变量名[key]=“value”
$变量名[key]=“value”
5.遍历关联数组
foreach($数组变量名 as $x=>$x_value){}
<?php
$score=array("NO.1"=>"100","NO.2"=>"90","NO.3"=>"80");
foreach($score as $x=>$x_value)
{
echo $x . "的成绩是" . $x_value;
echo "<br>";
}
?>
输出结果
NO.1的成绩是100
NO.2的成绩是90
NO.3的成绩是80
6.数组排序
函数 | 注解 |
---|---|
sort() | 对数组进行升序排列 |
rsort() | 对数组进行降序排列 |
asort() | 根据关联数组的值,对数组进行升序排列 |
ksort() | 根据关联数组的键,对数组进行升序排列 |
arsort() | 根据关联数组的值,对数组进行降序排列 |
krsort() | 根据关联数组的键,对数组进行降序排列 |
类型比较
1.松散比较: == ,只比较值,不比较类型。
2.严格比较:=== ,除了比较值,也比较类型
3.比较运算符中>=正确表达,返回布尔值
4.优先级: && > = > and
5.优先级: || > = > or
命名空间
引入的多个文件中可能存在同名的类、函数、常量,就会报错
定义命名空间
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间
<?php
namespace MyProject;
const CONNECT_OK = 1;//常量
class Connection { /* ... */ }//类
function connect() { /* ... */}//函数
?>
空间成员
1.空间只影响类、函数、常量(const)
2.其他代码不受影响
子空间以及访问方式
子空间命名
<?php
namespace MyProject\Sub\Level; //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */
?>
访问方式
- 非限定访问:访问当前空间的成员
- 限定访问:只能访问当前空间的子空间的成员 子文件夹\元素名
- 完全限定:可以访问其他空间的所有成员 \空间名\元素名
use 空间名\空间名 【as 别名】:将指定空间引入到当前空间。同可以使用as关键字为被引入的空间起个别名
面向对象
类的定义以及实例化
1.类使用 class 关键字后加上类名定义
2.类名后的一对大括号({})内可以定义变量和方法
3.类的变量使用 var 来声明, 变量也可以初始化值。
4.函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问
5.变量 $this 代表自身的对象。->指向成员变量名称
6.调用成员函数用->
<?php
class Car{
/* 成员变量 */
var $cloor;
/* 成员函数 */
function setCloor($col){
$this->cloor = $col;
}
function showCloor(){
echo $this->cloor;
}
}
$Volvo=new Car;
$Volvo->setCloor("red");
$Volvo->showCloor();
?>
php构造函数
要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用
void __construct ([ mixed $args [, $… ]] )
<?php
class Car{
/* 成员变量 */
var $cloor;
/* 成员函数 */
function __construct($col){
$this->cloor = $col;
}
function showCloor(){
echo $this->cloor;
}
}
$Volvo=new Car("red");
$Volvo->showCloor();
?>
析构函数
当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函
void __destruct ( void )
类的继承
访问控制
- public(公有):公有的类成员可以在任何地方被访问。
- protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
- private(私有):私有的类成员则只能被其定义所在的类访问。
继承
PHP 不支持多继承
<?php
class Car{
public $cloor;
function __construct($col){
$this->cloor = $col;
}
function showCloor(){
echo $this->cloor;
}
}
class Scar extends Car{
public $speed;
function __construct($col,$spd){
$this->cloor = $col;
$this->speed = $spd;
}
function showSpeed(){
echo "<br />".$this->speed;
}
}
$Volvo=new SCar("red",55);
$Volvo->showCloor();
$Volvo->showSpeed();
?>
接口
1.使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容
2.接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的
3.接口中定义的所有方法都必须是公有,这是接口的特性
4.要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
<?php
//定义接口
interface interface_1
{
public function dosomething();
}
// 实现接口
class interface_2 implements interface_1
{
public function dosomething()
{
/**/
}
}
?>
Static 关键字
1.声明类属性或方法为 static(静态),就可以不实例化类而直接访问,类名: :方法名
2.静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)
3.由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用
4.静态属性不可以由对象通过 -> 操作符来访问。
<?php
class test{
public static $my_static = 'test';
public function showValue() {
return self::$my_static;
}
}
echo test::$my_static . "<br />";
$test = new test();
echo $test->showValue();
?>
Final 关键字
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
调用父类构造方法
PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct()
<?php
class parentclass{
function __construct(){
echo "这是父类的构造方法<br />";
}
}
class childclass extends parentclass{
function __construct(){
parent::__construct();
echo "这是子类的构造方法";
}
}
$obj=new childclass;
?>
输出结果
这是父类的构造方法
这是子类的构造方法