[WIP]php入门

创建: 2019/06/19

 

# TODO: 2019/07/11 foreach

https://www.sejuku.net/blog/22195#foreach

 

 

安装
 MAMP  
变量与运算符
 php标签

 

 <?php ... ?>  
<?php
...
?>

 ● 在文件最后的 ?> 通常省略, 避免bug

 ● 输出文字

<?= 字符串; ?>
// 相当于
<?php echo 字符串; ?>

 

 在html里插入php

 ● 文件名后缀为php

 

 声明的分隔与注释 

 

 分隔符

  ;   

 除了自定义的变量与常量都不区分大小写  
 注释

 

 单行注释

 

// 注释A...
#  注释B...  

 

 多行注释

 

/* 
    注释
*/

 

 

 

   

 

 变量与常量 

 

 变量

 

 声明

 无需声明, 带上  $  即可

$sample = 1;

 

 

 系统定义的变量

  $_ 开头的是超级全局变量

 

 $GLOBALS  全局可用的所有变量的指针
 $_SERVER  服务器环境和运行环境
 $_GET  HTTP GET变量
 $_POST  HTTP POST变量
 $_FILES  HTTP上传文件变量
 $_REQUEST  HTTP请求变量
 $_SESSION  session变量
 $_ENV  环境变量
 $_COOKIE  HTTP cookie
 $php_errormsg  最近的错误信息
 $HTTP_RAW_POST_DATA  原生post数据
 $argc  传入脚本的参数数量
 $argv  传入脚本的参数数组 

 

 

 常量

 

 声明

 关键词 const  

const SAMPLE = 1.0

 

 

 注意  习惯上常量所有字母都大写
 已定义的常量

 

 核心模块变量

 

 PHP_VERSION_ID  运行中的php版本, 整数值
 PHP_EOL  现在OS的换行文字
 PHP_INI_MAX  整数最大值
 PHP_INT_MIN  整数最小值
 PHP_OS  现在的OS
 TRUE  true
 FALSE  false
 NULL  null
 E_ERROR  重大的运行错误
 E_PARSE  编译器的解析错误

 

 逻辑变量

 

 __LINE__  现在的行号
 __FILE__  文件的绝对路径与文件名
 __DIR__  当前文件所在文件夹
 __FUNCTION__  现在的函数名
 __CLASS__

 现在的类名

 # TODO: check here p42

 __TRAIT__   跟踪名
 __METHOD__  类的方法名
 __NAMESPACE__  现在的命名空间的名称

 

 

 

 

 展示字符串或变量 

 都输出到html里

 输出多个值

 

echo a1(, a2, ...)

 例 

echo 'sample'; //=> sample
echo 'a', 'b', 'c'; //=> abc

 ● 只有一个变量时可以带括号

echo('sample'); // => sample

 

 

 输出一个值 

 

print(值) // 可以不要括号

 

 ● 连结多个值, 用  .  

$sample="b";
print("a".$sample); // => ab

 

 

 

 debug用

 # TODO: finish here p44

 ● 要想带换行, 放入 <pre>...</pre> 标签

 http://www.w3school.com.cn/tags/tag_pre.asp

 print_r()  
 var_dump()  

 

   

 

 运算符

 

 代入运算符  
$a = b;

 

 复合代入运算符

 

 +=, -=, *=, /=, %=  
 .=  

 

$a."_pdf"

 

 

 算术运算符

 +, - , *, /, %, **(指数)

2**10 // => 1024

 

 

 

 递加递减

 ++, --

$a++ // 先评价式子最后递加
++$a // 先递加再评价式子

 ● 对字符串递加递减

 认定成数字的作为数字, 认定成字母的按字母顺序

 

 字符串连结运算符

   .  

 例

"hello "."world"; //=>hello world

 ● 对数字使用则自动转为字符串

100 . 200 //=? 100200

 

 ● 带有数字时  .  两侧放上空格

 

 比较运算符

 

 >, <  常识
 >=, <=  常识
 ==, !=  常识
 ===  两侧类型相同 且 值相等
 !==  两侧类型不同 或 值不相等
   

 

 php7新增

 

 <=>  
$a <=> $b

 

  a>b时为正, a=b时为0, a<b时为负

 (相当于a-b)

 ??

 

$a ?? $b

 a为null则用b的值, 否则用$a

 ● 连用

$a ?? $b ?? "default";

 

 

 

 逻辑运算符

 

 &&

 and

 

$a && $b
$a and $b

 

 ||

 or

  
$a || $b
$a or $b

 

 xor  
$a xor $b

 

 !  
!$a

 

   

 

 三项运算符  
逻辑式 ? true时的值 : false时的值
 
 位运算符

 

 <<, >>  移位
 &

 都是1则1, 否则0

$a & $b

 

 

 | 

 有1则1, 否则0

$a | $b 

 

 ^ 

 两个相反则为1

$a ^ $b

 

 

 ~ 

 0, 1对调

~$a

 

 

   

 

 转换运算符

 php不验证类型, 根于式子自动转换。故一般不需要

 (int)

 (integer)

 转换为整数

 (bool)

 (boolean)

 转换为布尔值

 (float)

 (double)

 (real)

 转换为浮点数
 (string)  转换为字符串
 (array)  转换为数组
 (object)   转换为object
 (unset)  转换为null

 

 类型运算符

 如果是指定类的实例则返回true, 否则返回false

实例 instanceof 类

 例

$now instanceof DateTime

 

 

 

条件与循环
 if

 ● 标准写法

if(c1) {
    ...
} else if (c2) {
    ...
} else if (c3) {
    ...
} else {
    ...
}

  ● 不带括号写法

if (c1):
    ...
elseif (c2):
    ...
else
    ...
endif;

 

 

 

 switch 

 ● 标准写法

switch(式子) {
    case v1:
        ...
        break;
    case v2:
        ...
        break;
    ...
    default: // 可省略
        ...
        break;
} 

 ● 不带括号写法

switch(式子):
    case v1:
        ...
        break;
    case v2:
        ...
        break;
    ...
    default: // 可省略
        ...
        break;
endswitch;

 

 

 while

 ● 标准写法

while (c) {
    ...
};

 ● 不带括号写法

while (c):
    ...
endwhile;

 

 

 do-while 

 ● 标准写法

do {
    ...
} while (c);

 

 ● 不带括号写法

 不存在

 

 for 

 ● 标准写法 

for(初期条件; 条件式; 计数器更新方式) {
    ...
}

 

 ● 不带括号写法

for(初期条件; 条件式; 计数器更新方式):
    ...
endfor

 

 

 break  
 continue  
函数
 常用的数学函数

 

 abs(数值)  返回绝对值
 ceil(数值)  大于参数的最小整数
 floor(数值)  小于参数的最大整数
 max(n1, n2, ...)

 获取最大值, string则为字母顺序

 min(n1, n2, ...)  获取最小值, string则为字母顺序
 sqrt(数值)  平方根
 pow(a, b)

 a的b次方

 相当于

a**b 

 

 mt_rand()  返回一个0~mt_getrandmax()之间的随机数
 mt_rand(min, max)  返回一个min~max之间的随机数
 pi()  圆周率π
 sin(n)  
 cos(n)  
 tan(n)  
 is_nan(n)  n是不是数值

 

 自定义函数

 # TODO: 整理此处的内容

 函数定义

 和js一样会提前提取函数声明, 故没有顺序 

 

function 函数名(a1, a2, ...) {
    ...
    return ...;
}

 

 

 参数的省略与初始值

 注: 带初始值的参数后面的参数都要带初始值

function 函数名(a1, a2, ..., ar1=..., ar2=..., ...) {
    ...
}

 

 

 动态长度参数

 参数名前带 ... , 此参数及后面的作为数组传入此

function 函数名(a1, a2, ..., ...b) {
    ...
} 

 ● 获取参数信息

 func_get_args()  获取参数的数组
 func_num_args()  获取参数的个数
 func_get_arg()  获取指定的参数

 

 指定参数和返回值的类型

 

function 函数名(类型 参数1, 类型 参数2, ...):返回值的类型 {
    ...
}

  ● 可以指定的类型

 array  数组
 callable  回调函数
 bool  布尔值
 float  浮点数(float, double, real)
 int  整数
 string  字符串
 类名/接口名  指定的类的实例
 self  实例自身

 ● 可以省略返回值类型, 也可以参数里混搭不指定类型的

 传值与传指针

 传指针的可以改变自身

&参数名

 例

function sample($a, &$b) {...}

 

 

 函数指针

 函数名的字符串

 确认是否存在此函数, 用 function_exist() 

 无名函数

 

function (...) use(...) {
    ...
}

 

 ● 用use来声明使用的外部变量

 ● use内的值在函数定义时确定, 不论外部怎么变use里都不变

 

 变量的有效域 

 

 变量的有效域  所在的代码块
 内部使用全局变量

 

global 全局变量名

 例 

"this is global";
function sample(int $a, float $b, $c):bool {
  global $a;
  echo $a;
  return "sa";
}

 

 

 静态变量

 

static 变量名;

 

 

 动态生成变量 

 双重$, 用指定变量的值来命名变量名

$$sample

 例

$color = "red";
$$color = 1; // => $red = 1

 

 

 

字符串
   
   
   
   
数组
   
   
   
   
面向对象
 类的定义

 

 类定义

 

class 类名 {
    // properties
    public const 常量 = ...;
    public 变量 = ...;

    // methods
    public function 方法名(...) {
        ...
    }
}

 ● 属性的初始值必须是值, 不能是式子 

public $name = "a"."b"; // 不能这样

 

 

 生成实例

 

 生成实例

 

new 类名(...);

 

 

 获取属性, 呼出方法

 

$sample = new Sample();
$sample->$property;
$sample->method();

 

 

 

 $this

 类方法内部获取类的属性

public function test() {
    $a = $this.$b;
    ...
}

 

 

 ● 不带this的话只寻找本地属性, 故会报错

 构造函数

 

function __construct(...) {
    ...
}

 

 

 类文件与读取文件

 

 include(path)  遇到读取错误也会继续进行下去
 include_once(path)  且只读一次
 require(path)  遇到读取错误会抛出错误
 require_once(path)

 且只读一次

 实际都用这个

 

 

 静态变量, 静态方法

 

 声明

 

public static $version = "1.0.1";
public static function check_version(...) {...}

 

 

 接入

 

 自身类与实例处

 

self::类属性
self::类方法(...)

 

 例

self::$version;
self::check_version(self::$version);

 

 

 其他类呼出

 

类名::类属性
类名::类方法(...)

 

 

   

 

 范围修饰符

 

 public  我的战车随时出发
 protected  此类和子类才能读写
 private  只有此类内部才能读写

 

   

 

 类的继承 

 

 类继承

 

class 子类 extends 父类 {
    ...
}

 

 

 构造函数 

 父类的构造函数 parent::__construct(...) 

 

 

function __construct(...) {
    parent::__construct(...);
    ...
}

 

 

 重载 

 直接重新定义原来的函数即可...

 final

 禁止继承/重载 

final class ...
final function ...

 

 

 

 trait

 

 定义

 

trait 名 {
    // properties
    // methods
}

 

 

 用法

 

use trait1, trait2, ...;

 

 如果是外部文件里的, 要require_one(path)

 

 解决命名冲突

 insteadof

 # TODO 查查这里

 给方法增加名称

 as

use aT, bT {
    aT::hello as at_hello;
    bT::hello as bt_hello;
    aT::hello insteadof bT
}

 

 

 

 接口

 

 接口

 

interfaceextends 父接口名 {
    const 常数=值;
    function 函数名(...);
}

 

 

 

 采用接口

 

classextends 父类 implements n1, n2, ... {
    ...
}

 

 

 

 抽象类 

 

 定义

 

abstract class 名 {
    abstract function 名(...);
    ...
    // 抽象类内部功能的实现
    ...
}

 

 

 继承抽象类并实现方法

 

classextends 抽象类名 {
    ...
    function 抽象函数(...) {...}
    // 此类自身的功能实现
    ...
}

 

 

 

   
表单基础
   
   
   
   
表单例
   
   
   
   
session
   
   
   
   
文件读写
   
   
   
   
posted @ 2019-06-19 15:31  懒虫哥哥  阅读(144)  评论(0编辑  收藏  举报