PHP从零开始学习笔记

1、脚本标签

<?php
// PHP 代码
?>

2、输出

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

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

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

3、变量

以$开头,大小写敏感

<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>

4、弱类型

弱类型,不必声明类型

5、常量

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

<2>没有$开头

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

<?php
define("GREETING", "Hello World!");
echo GREETING;
?>

<?php
define("GREETING", "Hello World", true);
echo greeting;
?>

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

 <!DOCTYPE html>
<html>
<body>

<?php
define("GREETING", "Hello World!");
function test()
{
	echo GREETING;//可以正常输出
}
test();
?>  

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

 <!DOCTYPE html>
<html>
<body>

<?php

function test()
{
	define("GREETING", "Hello World!");
}
test();
echo GREETING;//正常输出
?>  

</body>
</html>

6、变量作用域

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

<?php 
$x=5; // 全局变量 

function myTest() 
{ 
    $y=10; // 局部变量 
    echo "<p>测试函数内变量:<p>"; 
    echo "变量 x 为: $x"; //这样的方法访问不到全局的$x,所以这里输出为空
    echo "<br>"; 
    echo "变量 y 为: $y"; 
}  

myTest(); 

echo "<p>测试函数外变量:<p>"; 
echo "变量 x 为: $x"; 
echo "<br>"; 
echo "变量 y 为: $y"; 
?>
<2>使用$GLOBAL可以在函数内访问全局变量

<?php
$x=5;
$y=10;

function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 

myTest();
echo $y;//15
?>
<3>static作用域

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

<?php 

function myTest() 
{ 
    static $x=0; 
    echo $x; 
    $x++; 
} 

myTest(); //0
myTest(); //1
myTest(); //2
?> 
对于全局变量来说,有没有static没有差别

<?php 

static $x=0;

function myTest() 
{ 
    echo $GLOBALS['x'];
    $GLOBALS['x']++; 
} 

myTest(); //0
myTest(); //1
myTest(); //2
?> 
对一个局部变量来说,加了static并不会改变他的作用域

<?php 

function myTest() 
{ 
    static $x = 0;
    echo $x;
    $x++;
} 
echo $x;//注意,这里会提示此变量未定义
myTest(); 
myTest(); 
myTest(); 
?> 

7、数据类型

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

可以说一个Array搞定一切

<1>整型

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

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

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

<?php 
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>

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

<!DOCTYPE html>
<html>
<body>

<?php
$x = array("a" => "red", "b" => "green"); 
$y = array("c" => "blue", "d" => "yellow"); 
$z=$x+$y;
echo $z['a'];
$x['a']="black";
echo "<br>";
echo $z['a'];//red
echo "<br>";
echo $x['a'];//black
?>   

</body>
</html>
可以看到这个$z已经把所有元素复制过去,而非仅仅是一个引用,改变了原数组的元素,并不会改变$z的元素。
-count可以返回数组长度

<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?>
-遍历数组

<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);

for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
-关联数组(键值对)
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");//创建方法1
//创建方法2
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

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

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

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


<5>对象

<?php
class Car
{
  var $color;
  function Car($color="green") {
    $this->color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>
<6>NULL

<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>

8、运算符

<1>三元运算符

<?php
$test = '菜鸟教程';
// 普通写法
$username = isset($test) ? $test : 'nobody';//isset判断bool值,string是否已赋值
echo $username, PHP_EOL;

// PHP 5.3+ 版本写法
$username = $test ?$test."hello": 'nobody';
//$username = $test ?: 'nobody';//也可以这样省略
echo $username, PHP_EOL;//PHP_EOL是换行符
?>

9、数组排序

<1>sort()升序排列

<?php
$cars=array("Volvo","BMW","Toyota");
sort($cars);
echo "$cars[0]";//BMW,字母小的排前面
?>

<?php
$numbers=array(4,6,2,22,11);
sort($numbers);
echo "$numbers[0]";//2,数值小的排前面
?>

<2>rsort()降序排列

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

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

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

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

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

$orders = array_reverse($orders);


10、超级全局变量

<1>$GLOBALS

用来引用全局变量

<2>$_SERVER

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

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

<4>$_POST

收集表单数据

<5>$_GET

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

<?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;

  function __construct( $par1, $par2 ) {
    $this->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:相当于把代码包含进来,就是那个引用的文件把这一行代码代替了,这个要包含的文件 必须是<?php?>包含的,路径最好用正斜杠

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

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

use:相当于java的import

a.php

<?php 
	$a++;
?>

b.php

<?php
	$a=5;
	require_once("a.php");
	echo $a;//6
	require_once("a.php");
	echo $a;//6,如果用了require则为7,因为他不管有没有加载过都会再次加载
?>


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()返回字符串长度

<?php 
echo strlen("Hello world!"); 
?>

<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

<?php 
echo strpos("Hello world!","world"); 
?>

查找在给定字符串内有没有存在某子字符串,如果有则返回其第一次出现的位置,如果没有则返回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('返回正确');
}







  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值