PHP从零开始学习笔记

1、脚本标签

2、输出

有两种在浏览器输出文本的基础指令:echo 和 print

echo - 可以输出一个或多个字符串
print - 只允许输出一个字符串,返回值总为 1
echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

PHP is fun!";
echo "Hello world!
"; echo "I'm about to learn PHP!
"; echo "This", " string", " was", " made", " with multiple parameters."; ?>

3、变量

以$开头,大小写敏感

4、弱类型

弱类型,不必声明类型

5、常量

<1>(整个脚本中)自动全局

<2>没有$开头

<3>可以设置(常量名)大小写是否敏感


, true);
echo greeting;
?>

<4>在函数内直接引用常量,不需要像变量那么麻烦

 



  


<5>函数外可以直接引用函数内定义的常量

 



  



6、变量作用域

<1>函数内不能直接访问全局变量

测试函数内变量:

"; echo "变量 x 为: $x"; //这样的方法访问不到全局的$x,所以这里输出为空 echo "
"; echo "变量 y 为: $y"; } myTest(); echo "

测试函数外变量:

"; echo "变量 x 为: $x"; echo "
"; echo "变量 y 为: $y"; ?>

<2>使用$GLOBAL可以在函数内访问全局变量

<3>static作用域

定义在函数内的变量,每次调用完都是清空的,但是加了static他就可以保存住

 
对于全局变量来说,有没有static没有差别

 
对一个局部变量来说,加了static并不会改变他的作用域

 

7、数据类型

String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)

可以说一个Array搞定一切

<1>整型

"; 
$x = -345; // 负数 
var_dump($x);
echo "
"; $x = 0x8C; // 十六进制数 var_dump($x); echo "
"; $x = 047; // 八进制数 var_dump($x); ?>
<2>浮点型

"; 
$x = 2.4e3;
var_dump($x);
echo "
"; $x = 8E-5; var_dump($x); ?>
<3>布尔型

$x=true;
$y=false;
<4>数组

-数组里面可以是键值对,还可以用"+"将两个数组连接成一个数组





 "red", "b" => "green"); 
$y = array("c" => "blue", "d" => "yellow"); 
$z=$x+$y;
echo $z['a'];
$x['a']="black";
echo "
"; echo $z['a'];//red echo "
"; echo $x['a'];//black ?>
可以看到这个$z已经把所有元素复制过去,而非仅仅是一个引用,改变了原数组的元素,并不会改变$z的元素。
-count可以返回数组长度

-遍历数组

";
}
?>
-关联数组(键值对)
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");//创建方法1
//创建方法2
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
-遍历关联数组

"35","Ben"=>"37","Joe"=>"43");

foreach($age as $myKey=>$myValue)
{
echo "Key=" . $myKey . ", Value=" . $myValue;
echo "
"; } ?>


<5>对象

color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>
<6>NULL

8、运算符

<1>三元运算符


9、数组排序

<1>sort()升序排列



<2>rsort()降序排列

<3>asort()根据值升序排列

<4>ksort()根据键升序排列

<5>arsort()根据值降序排列

<6>krsort()根据键降序排列

<7>数组倒转(顺序反过来):

$orders = array_reverse($orders);


10、超级全局变量

<1>$GLOBALS

用来引用全局变量

<2>$_SERVER

";
echo $_SERVER['SERVER_NAME'];//主机名(域名)
echo "
"; echo $_SERVER['HTTP_HOST'];//请求头中host的内容 echo "
"; echo $_SERVER['HTTP_REFERER'];//引导用户代理到当前页的前一页的地址(该值不可信) echo "
"; echo $_SERVER['HTTP_USER_AGENT'];// echo "
"; echo $_SERVER['SCRIPT_NAME'];//包含当前脚本的路径 ?>
<3>$_REQUEST

用于收集HTML表单提交的数据

<4>$_POST

收集表单数据

<5>$_GET

11、面向对象,成员函数调用(->)

url = $par1;
    $this->title = $par2;
  }
  /* 成员函数 */
  function setUrl($par){
     $this->url = $par;
  }
  
  function getUrl(){
     echo $this->url . PHP_EOL;
  }
  
  function setTitle($par){
     $this->title = $par;
  }
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}

$runoob = new Site('www.runoob.com', '菜鸟教程');
$taobao = new Site('www.taobao.com', '淘宝');
$google = new Site('www.google.com', 'Google 搜索');

// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();

$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
?>

12、代码的引用

include、require、use

include、require:相当于把代码包含进来,就是那个引用的文件把这一行代码代替了,这个要包含的文件 必须是包含的,路径最好用正斜杠

include如果找不到会报一个警告然后继续执行,require则会报错误并且停止执行,如果是系统配置,缺少了不能允许,则我们应该用require

include_once、require_once:加了once之后,系统会判断,如果已经添加了,则不会添加第二次,但是系统做这个判断效率会降低,因此应该尽量靠系统架构使其不会重复加载,然后代码上面尽量不要用once影响效率

use:相当于java的import

a.php


b.php


13、单引号与双引号

单引号不解释(直接输出),双引号会经过解释


14、ceil的使用

            // 测试实例如下:
            $total1 = 40;
            echo 'page_num1='.ceil($total1/30);//2
            $total2 = 30;
            echo 'page_num2='.ceil($total2/30);//1
            $total3 = 20;
            echo 'page_num3='.ceil($total3/30);//1
            $total4 = 0;
            echo 'page_num4='.ceil($total4/30);//0

15、字符串相关

<0>strlen

-strlen()返回字符串长度


<1>mb_strlen

上面提到的strlen函数计算字符串长度的时候,并非完美。

当字符串里面含有中文的时候,如果是utf-8格式的,每个中文将会计算为3个字符。

因此我们需要另一个统计函数,这个统计函数每个中文只统计为1。

                $length = mb_strlen($item_name,'utf8');

<2>mb_substr

截取字符串,配合mb_strlen使用,第一个参数是原字符串,第二个参数是起始位置(从0开始),第三个参数是截取的长度,第四个参数是编码。

               $str = mb_substr($item_name,0,10,'utf8');


<3>strpos查找子字符串

-strpos()返回一段字符串在另一个字符串中的index


查找在给定字符串内有没有存在某子字符串,如果有则返回其第一次出现的位置,如果没有则返回false

使用方法:

if (strpos($from,$find) === false)
{
    // 这里是找不到
}else
{
    // 这里是找到了
}

<4>strstr根据分隔符截取

$str1 = strstr($from,$find,true);// 返回分隔符之前的部分,不包含分隔符
$str2 = strstr($from,$find);// 返回分隔符之后的部分,包含分隔符

<5>substr根据index截取

$str = substr($fromSku2,1);// 从第2个字符开始截取

<6>防止数字变为科学计数法

$orderId = number_format($orderId,0,'','');

<7>获取链接的包含扩展名的文件名

$name =  basename($imgUrl);

<8>分割字符串返回数组

$skuArr = mb_split('\s','hello world');
Array (
      [0] => hello
      [1] => world
   )

<9>strripos查找字符串在另一个字符串中最后一次出现的位置

$str = 'https://product.suning.com/0070152707/10042045173.html';
        $find = '/';
        $index = strripos($str,$find,0);
        exit('test='.$index);//37
注意:如果是找不到则返回false


16、isset

判断一个变量是否存在。

比如,当一个json解析之后,我们要看其中一个字段是否存在,比如这个请求返回的是正确还是错误,如果返回正确,那么字段里面没有'error';如果返回错误,返回的字段里面有'error',我们不能直接:

if($obj->{'error'} == null)
{
    exit('返回错误');
}else
{
    exit('返回正确');
}

这样判断是不行的,当对象里面没有error的时候,你这样访问页面要报错,正确的方法是:

if(isset($obj->{'error'}))
{
    exit('返回错误');
}else
{
    exit('返回正确');
}







你可能感兴趣的:(php)