php学习笔记

php变量:

与C语言不同的是,php中决定一个变量的类型的不是在该变量的声明过程中,而是在给变量赋值的过程中。即一个变量的声明不需要指定其类型,变量的类型取决于其存放的内容。变量的赋值和引用都只需要在变量名前面加一个“$"符号即可。

变量需要手动销毁:unset($var_name);

php中的字符串:

php中有两种类型的字符串:单引号类型的字符串 'string' ,和双引号类型的字符串 "string"。

单引号类型的字符串的声明:$var_name='string';

双引号类型的字符串的声明:$var_name="string";

     或者使用定界符:$var_name=<<<name

             string

             name;

单引号类型的字符串与双引号类型的字符串的区别:

单引号字符串举例:

$a=500;
$str='hello$aworld';
echo($str);
//result:hello$aworld

双引号字符串举例:

$a=500;
$str="hello{$a}world";
echo($str);
//result:hello500world

*注意这里的{}符号。使用定界符定义字符串变量时,不需要使用转义字符,但是结尾定界符所在行中,定界符的前面不能有任何字符,即使是空格。

变量类型的转换:

自动类型转换:发生在运算过程中。

强制类型转换:类型转换的语句和C语言中的一样:(var_type)$var_name;  但与C语言不同的是,强制类型转换并不会转换变量的值,所以需要强制转换时,应该把强制转换的结果赋值给某个变量。

常量:

php中的常量与C语言中的预定义常量相似,不过声明一个常量的语句是:define('convar_name',value); 或者 define("convar_name",value);

常量与变量的区别在于:

  • 常量的引用不需要加"$"符号。
  • 常量的定义只能通过define()函数,而不能通过赋值语句。
  • 常量一旦被定义就不能重新定义或者取消定义。
  • 常量的类型只能是bool、int、float或者字符串。

与C语言一样的是,php中的常量名最好是大写的。

预定义的常量,即php中已经定义过了的常量,这些常量名都是以“_”符号开头,并且是不区分大小写的。

运算符:

php中的运算符与其他语言的运算符没有太大的区别。

这里只列举出几个C语言中没有的运算符号:

  1. ".":字符串拼接运算,用于拼接连个字符串,相当于java中的字符串"+"运算。
  2. “===”:全等符号,比较运算符,比较两个变量,不仅比较它们的值,而且比较它们的数据类型,如果两个变量的值和数据类型都相等则返回true。

不过在php中有一个需要注意的点是,php中的运算符可能会涉及数据类型的自动转换,但是这种数据类型的自动转换的条件是:类型的转换具有合理性。比如一个整数类型的变量加上一个字符串类型的变量,如果这个字符串的内容全是数字,那么会将这个字符串转换成相应的数字然后进行运算;否则,如果字符串中的内容是字母,那么运算过程将会忽略这个变量(而不是像C语言中,把字符串根据ASCII码表转换成数值)。

数组:

首先需要了解php数组中的一个概念:键-值对,表示一个键(key)可以用来作为数组中存放的某个值的索引值。相当于C语言中数组的下标与数值的关系,不过在php中,“下标”不想C语言那么僵硬(只能是0、1、…),我们可以自己指定一个数组中一个数值的索引值(键)。

数组的声明有两种方法,一种是现代(php 5.4之后)用的一种方法:$arr_name=[value_1, vaule_2,...];还有另外一种较为经典的声明方法:$arr_name=array(value_1,value_2,value_3...)。

此外,根据是否是自定义数组的键,数组还可以分成两种类型:数值数组,自动分配键值(0、1、2...);关联数组,自己为数组设置键值。这两种类型的数组的声明过程如下:

数值类型的数组的声明过程:

$cars=array("Volvo","BMW","Toyota");
或者
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="Toyota";

数值类型的数组的遍历过程:

<?php 
$cars=array("Volvo","BMW","Toyota"); 
$arrlength=count($cars);   //count()函数用于获取数组的长度

for($x=0;$x<$arrlength;$x++)
{ 
echo $cars[$x];
echo "<br>";
} 
?>

关联类型的数组的声明过程:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
或者:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

关联类型的数组的遍历过程:

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

foreach($age as $x=>$x_value)          //foreach(){}的使用方式:foreach($arr_name as $a=>$b),其中变量a中存放键值,变量b中存放数值  
{ 
echo "Key=" ,$x , ", Value=" , $x_value; 
echo "<br>"; 
} 
?>

此外,php中数组与C语言中的数组最大的一个区别在于,php中的数值类型可以是任何变量类型(包括数组),而且同一个数组中的可以有不同的变量类型。这一点看起来有点像C语言中的结构体类型变量。

可以只声明数组而不赋值:$arr_name=[]; 此外,如果在一个数组赋值时没有指定键值,则会默认当作数值类型数组处理。

数据的发送与接收:

数据的发送方:客户端(浏览器)

数据发送的方式:html中的表单<form>元素和<input>元素

数据的接收方:服务器(php)

数据的接收方式:和C语言中的main函数中的参数const char *argv[ ]用来存放输入的参数一样,php中预定义了两个常量,用来存放通过两种方式发送过来的数据。并且这两个预定义的常量($_POST和$_GET,它们对应于form元素中method属性的值)的数据类型也是字符串。数组的键值由表单中的<input>元素中的name属性给出。

下例代码给出一个html文件和一个php文件的内容,其运行结果是:在html文件显示一个表单,用户输入其用户名,以及要发送的消息,点击提交后,跳转至php文件(在此代码中为dataSave.php),然后在php文件打印用户输入的值。

/*html code*/
<form action="dataSave.php" method="POST">               <!--action属性用于指明跳转到哪个php文件-->
    <textarea cols="50px" raws="5px" name="message"></textarea>
    <input type="text" placeholder="user_name" name="user">
    <input type="submit" value="send">
</form>
/**********************************************************/
/*dataSave.php code*/
<? php
echo $_POST['user'],":",$_POST['message'];
?>

 这里需要注意的是,POST和GET两种方法的区别:GET方法,输入的内容会直接显示在url中,通常用于从数据库中查询输入内容;而POST方法不会在url中显示输入内容,所以通常用于读入用户的输入。

条件控制:

php语言中的条件控制和C语言中的条件控制语句没有太大的区别。

php中有一个C语言中没有的条件控制语句:foreach,它有两种使用方法:一种是只遍历数组内的值,另一种是遍历数组的键值及其对应的数值。

foreach($arr_name as $value){
    //变量value中存放数组的值
}
/********************************************************/
foreach($arr_name as $key_name=>$value){
    //变量key_name中存放数组的键值,变量value中存放数值
}

函数:

php中函数与C语言中的函数的区别在于:

  • php中创建函数必须使用关键字function来进行。
  • 如同php中的变量一样,php中的函数不需要在声明的过程中指定返回值的数据类型。
  • 变量的作用范围,全局变量只能在外部使用(不像C语言可以在函数内部调用全局变量),而局部变量也不能在外部使用。可以这样理解,php中只有那些预定义的变量才能作为全局变量被调用,而<?php  ?>中包含的代码就相当于C语言中的main()函数,而使用关键字funciton创建函数时,则是在main()函数外部创建的。

其余的部分,包括参数的传递,以及函数的调用,都与C语言没有太大区别。这里给出一个简单的函数声明过程与调用过程:

<? php
echo add(100,200);           //打印结果为300
function add($a,$b){
    $sum=$a+$b;
    return $sum;
}
?>

 类:

php的类与java中的类使用方法没有太大区别,类的每个方法和属性值都有其可见性:public(公开)、protected(受保护的)、private(私密的)

<?php
class Name{
    public $given='NOT_GIVEN';           //设置默认值
    public $family='NOT_GIVEN';          //设置默认值
    function Name($a,$b){                //定义构造函数
        $this->family=$b;                //this关键字,用于在创建类的方法时引用类的属性,不能在方法外部使用这个关键字
        $this->given=$a;
    }
}
$myName=new Name('Peter','Parker');
echo $myName->given." ".$myName->family;
?>

 最大的区别在于,引用一个类变量的属性值或方法时,只能用"->"符号,不能用“."符号,并且引用一个类变量的属性值时,只需要在类变量名前面添加"$"符号,而不需要在其属性变量前面个添加"$"符号。

php中有一个include关键字,和C语言中的"#include"一样,可以允许php程序中引用其他php文件的代码。不过使用的方法不同,php中include关键字的使用方法为:inlcude('fileName.php');

数据库:

可以使用php语言连接到数据库并且执行sql语句。这里对数据库的操作,一般都采用面向对象的方法。

连接到数据库:

<?php
$serverName='localhost';
$user="root";
$pwd="123456";
$dbname="dbtest";
//连接数据库
$conn=new mysqli($serverName, $user, $pwd,$dbname);

//检查是否连接成功
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
}
echo "connect successfully!";
?>

 通过代码可以看出,使用php连接到数据库的操作就是创建一个名为mysqli的一个对象,这个对象里有各种属性值与方法来实现对sql语句的执行。对mysqli对象里的属性值的使用通常用于检查数据库是否连接成功或者sql语句是否执行成功,这里给出几个常用的属性值的描述:

  • $mysqli->affected_rows,用于获取前一个sql语句影响到的行数
  • $mysqli->connect_errno,返回最后一次连接调用的错误代码
  • $mysqli->connect_error,返回一个字符串描述的最后一次连接调用的错误代码
  • $mysqli->errno,返回最近的函数调用产生的错误代码
  • $mysqli->error,返回字符串描述的最近一次函数调用产生的错误代码

 通常当error值等于零的时候表示连接成功。

插入数据:

mysqli对象中还有一个方法$mysqli->query(“query”),用于执行sql语句。

需要注意的是,query方法的返回值由执行结果的不同而不同:当执行sql语句失败时返回false;当成功执行了select, show, describe, 或者explain语句时返回一个名为mysqli_result对象;当成功执行了其他语句时返回true。

$contents="mother fucker";
$name="Nick";
$time=time();
var_dump($contents,$name,$time);
$sql="insert into table1 (name,info,time) values ('{$name}','{$contents}',$time)";
$result=$conn->query($sql);
var_dump($result);

 注意,在插入字符串类型的值时,如果需要插入的值存放在一个字符串类型的变量中时,需要在将对应字段写成:’{$var_name}‘,正如前面字符串类型里所说,当需要将一个字符串类型变量的值嵌入到一个字符串里时,需要将变量名放在{}中以便识别。而这里之所以能够用单引号,是因为字符串的嵌套只能有两层,而且外层必须是双引号,内层必须是单引号。

获取查询结果:

前面说过,当执行使用mysqli->query()执行查询语句时,返回一个mysqli_result对象,这其实就是返回的结果集。

mysqli_result对象中有下面这些方法可以将查询的结果打印出来:

  • mysqli_result::fetch_all —将所有的结果(所有行)存放在一个数值类型的二维数组中,数组中的一个元素就是查询结果的一行。添加常量常数 MYSQLI_ASSOC 可以指定将结果转换成一个关联数组,不过第一维仍然是一个数值类型的数组。
  • mysqli_result::fetch_array — 将结果中的一行存放在一个同时是数值类型的数组和关联类型的数组(列名作为键值)。因此,假设查询结果有n列,则该方法返回的数组大小为2n。
  • mysqli_result::fetch_assoc — 将结果中的一行存放在一个关联数组中,并将列名作为键值。
  • mysqli_data_seek(int ) — 重置fetch*方法的游标,使其指向参数指定的位置。

给出一个遍历所有结果行的代码:

$sql="select * from table1";
$result=$conn->query($sql);
while($row=$result->fetch_assoc()){
    var_dump($row);
}

 每次调用fetch-assoc()或者fetch->array()方法时,都会自动指向下一行。所以,这个方法不会自动将游标指向开始的位置。此外,fetch_all()方法也是只能执行一次,重新指定游标。重置游标的代码:

var_dump($result->fetch_all(MYSQLI_ASSOC));
$result->data_seek(0);    //重置游标,使其指向第0行
var_dump($result->fetch_all(MYSQLI_ASSOC));

将PHP代码嵌入到html中:

要将php代码嵌入到html中,首先需要将html文件的后缀名改为.php,然后,每段php代码都需要用<?php ?>包裹住,即使是同一个代码块{ }中,如果这个代码块中存在html代码都需要用<?php ?>将php部分的代码包裹住,以区分html代码。

函数header("locat: file.php");可以指定php文件执行到header()函数时自动跳转到某个文件。

原文地址:https://www.cnblogs.com/TheFutureIsNow/p/10867145.html