创建: 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
}
 接口
 接口
interface 名 extends 父接口名 {
const 常数=值;
function 函数名(...);
}
 采用接口
class 名 extends 父类 implements n1, n2, ... {
...
}
 抽象类 
 定义
abstract class 名 {
abstract function 名(...);
...
// 抽象类内部功能的实现
...
}
 继承抽象类并实现方法
class 名 extends 抽象类名 {
...
function 抽象函数(...) {...}
// 此类自身的功能实现
...
}
   
表单基础
   
   
   
   
表单例
   
   
   
   
session
   
   
   
   
文件读写
   
   
   
   

[WIP]php入門的更多相关文章

  1. 依賴注入入門——Unity(二)

    參考博客文章http://www.cnblogs.com/kebixisimba/category/130432.html http://www.cnblogs.com/qqlin/tag/Unity ...

  2. GOOGLE搜索從入門到精通V4.0

    1,前言2,摘要3,如何使用本文4,Google簡介5,搜索入門6,初階搜索 6.1,搜索結果要求包含兩個及兩個以上關鍵字 6.2,搜索結果要求不包含某些特定資訊 6.3,搜索結果至少包含多個關鍵字中 ...

  3. Flask從入門到入土(三)——模板

    模板是一個包含響應文本的文件,其中包含佔位變量表示的動態部分,其具體值只是請求上下文中才能知道.使用真實值替換變量,再返回最終得到的響應字符串,這一過程稱爲渲染.爲了渲染模板,Flask使用了一個名爲 ...

  4. Windows PowerShell 入門(7)-関数編2

    この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.前回に引き続きPowerShellにおける関数の取り扱いとして.変数と関数のスコ ...

  5. Windows PowerShell 入門(3)-スクリプト編

    これまでの記事 Windows PowerShell 入門(1)-基本操作編 Windows PowerShell 入門(2)-基本操作編 2 対象読者 Windows PowerShellでコマンド ...

  6. Windows PowerShell 入門(2)-基本操作編 2

    前回に引き続きMicrosoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.基本操作編第2弾の今回は.パイプの使用方法を中心としたコマンドレットの操作方 ...

  7. Delphi APP 開發入門(四)簡易手電筒

    Delphi APP 開發入門(四)簡易手電筒 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數:32 ...

  8. Delphi APP 開發入門(六)Object Pascal 語法初探

    Delphi APP 開發入門(六)Object Pascal 語法初探 分享: Share on facebookShare on twitterShare on google_plusone_sh ...

  9. Delphi APP 開發入門(五)GPS 定位功能

    Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數 ...

随机推荐

  1. 分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!

    过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研究称为R ...

  2. JavaUtil_06_HttpUtil_使用httpclient实现

    一.简介 使用 appache 的 httpclient 来实现的 二.源码 package com.ray.weixin.gz.util; import java.io.File; import j ...

  3. Eclipse_debug异常_Source not found

    一.现象 在eclipse中,打了断点之后运行代码,出现debug异常:Source not found,如下图 原因 找不到源码. 解决方案 添加源码即可 1.Edit Source Lookup ...

  4. HihoCoder1339 Dice Possibility(概率DP+母函数)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 What is possibility of rolling N dice and the sum of the numb ...

  5. redis的缓存穿透 缓存并发 缓存失效

    我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 一.缓存穿透 Paste_Image.png Paste_Image.png ...

  6. [SDOI 2017] 序列计数

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4818 [算法] 考虑容斥 , 用有至少有一个质数的合法序列数 - 没有质数的合法序列 ...

  7. oddjob之smooth关闭程序

    java程序的smooth关闭策略可以采用hook跟观察者的模式实现 无限等状态,如果状态出现可以关闭的事件则进行关闭 虚拟机的关闭通过钩子调用关闭,如果关闭失败,在超时时间内强制杀掉jvm 状态类 ...

  8. poj 2388 Who's in the Middle(快速排序求中位数)

    一.Description FJ is surveying his herd to find the most average cow. He wants to know how much milk ...

  9. Hadoop十年

    于 2006 年 1 月 28 日诞生的它改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用.在此为大家梳理 Hadoop 这十年的变 ...

  10. CSS3 日常小结

    1. pointer-events:none; 2. flex 今天看到一个牛X的CSS3属性 flex, 称为弹性盒子.  这中属性完全可以替代媒体查询啦 使用方法: 父元素使用属性display ...