PHP基础

发布于 2022-07-15  454 次阅读


基础语法

基本结构
<?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

  1. 字符串转数字仅看第一位,若不为数字则转为0
  2. 数字转布尔,非零数为true,0为false
  3. 字符串转布尔,只要是资源都为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__

当前命名空间的名称(区分大小写)
届ける言葉を今は育ててる
最后更新于 2024-02-07