基础语法
基本结构
<?php //以此开头
; //每句完了要打分号
?> //以此结尾
注释方法
//我是单行注释
/*
我是
多行注释(我和mysql一样)
*/
变量与常量
$a=1; //申请全局变量a
function hanshu($b) //申请函数内变量b,b随函数结束而释放
{
global $a; //函数内用全局变量的申请
static $c=$b+$a; //申请函数内变量b,b随函数结束而保留
} //b和c只能在函数内使用
$txt="要打双引号";
strlen("$txt"); //查长度,记得加双引号
strpos("abcb","b") //只能查到第一个
逻辑与运算
% //求余
i++ //先输出值再自增
++i //先加一再自增
a===b //a,b树脂相同,类型相同
a==b //a,b数值相同,类型不同时转换为相同
拓展:"=="的弱比较
攻防世界题目:
https://adworld.xctf.org.cn/challenges/details?hash=97ccaf1c-b0ba-4152-88c1-10da78135303_2
- 字符串转数字仅看第一位,若不为数字则转为0
- 数字转布尔,非零数为true,0为false
- 字符串转布尔,只要是资源都为true,如null,float则为false
接上文
and //两个满足
or //至少一个满足
xor //有且仅有一个满足
判断与选择
if ($height<"175") //注意引号
{
echo "may be a 0";
}
else
{
echo "may be a 1"; //注意不在if内部
}
switch (wife)
{
case others: yang cry; //如果 wife=others,此处代码将执行;
break; //记得退出选择
case yang: yang smile; //如果 wife=yang,此处代码将执行;
break;
default: ???;
如果 wife 既不等于 yang 也不等于 others,此处代码将执行;
}
v
循环
for与c++一样
foreach ($x as $value) //x值依次加一
{
echo $value . PHP_EOL;
}
$x=array(1=>"Gooooo", 2=>"Runrun", 3=>"Taotao");
foreach ($x as $key => $value)
{
echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;
}
while(条件) //不加引号
{
执行代码; //break跳出,continue进入下一循环
}
do
{
执行代码;
}
while(条件);
数组
数值数组 - 带有数字 ID 键的数组 //以数字id为空间标志
关联数组 - 带有指定的键的数组,每个键关联一个值 //以指定字符串为空间标志
数值数组ID自动分配
$shuzu[]=array("zhang","&","yang")
数值数组ID手动分配
$shuzu[1]="zhang"
$shuzu[3]="yang"
$shuzu[2]="&"
获取数组元素个数
count($数组) //不加引号
关联数组ID手动分配1
$shuzu[]=array("1"=>"zhang","2"=>"&","3=>""yang")
关联数组ID手动分配2
$shuzu['1']="zhang"
$shuzu['3']="yang"
$shuzu['2']="&"
类基础
代码示例与理解
class Site { //理解:规定存入site的对象具有name和height两种属性
var $name;
var $height;
function setname($pass) //理解:将对象存入site时,调用该类函数,通过"$this->属性="读入对象的属性
{
$this->name = $pass;
}
function setheight($pass){
$this->height = $pass;
}
function getname() //理解:使用打印时,先用"对象->该类函数"确定对象,函数内通过$this->name
确定属性,输出属性
{
echo $this->name . "<br>";
}
function getheight()
{
echo $this->height . "<br>";
}
}
$one = new Site; //理解:存入一号和二号两个对象
$two = new Site;
$one->setname(zhang); //理解:为一号存入属性值
$one->setheight(170);
$two->setname(yang);
$two->setheight(180);
$one->getname(); //理解:为一号输出属性值
$one->getheight();
$two->getname();
$two->getheight();
?>
类的构造函数
理解:向类中装入对象时被自动运行的函数
用途示例:简化输入对象的过程,不需get类函数即可读入对象的属性值
function __construct( $pass1, $pass2) //注意是两个下划线
{
$this->name = $pass1;
$this->height = $pass2;
}
$one->setname(zhang);
$one->setheight(170);
$two->setname(yang);
$two->setheight(180);
替换为:
$one = new Site('zhang', '170');
$two = new Site('yang', '180');
类的析构函数
理解:对象进入类结束时被自动调用的函数(疑问:对象调用类中的函数而不是加入类,再该操作结束时会触发析构函数吗?)
function __destruct()
{
print "我免费啦 " ;
}
类的访问控制
属性控制
理解:在类外部调用属性信息的过程中审核
属性信息的调用:var public(不受保护公有),private protected(受保护)
子类中对父类属性的改写:var public protected(不受保护)private(受保护)
方法控制
理解:在类外部调用类中的函数时审核
函数调用:function ,public function(不受保护);private function,protected function(受保护)
子类中对父类的改写:除private都不受保护
魔术常量
__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名
__LINE__
文件中的当前行号。
__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
__FUNCTION__
函数名称(函数内部使用)
__CLASS__
类的名称
__TRAIT__
不好说,能看懂就行
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
输出hello world
__METHOD__
类的方法名
__NAMESPACE__
当前命名空间的名称(区分大小写)