PHP基础语法

有些话、适合烂在心里 提交于 2019-12-10 06:52:14

输出语句

  • echo
  • print

共同点:

  • 都可以输出字符串
  • echo 使用的时候可以不用加括号,也可以加上括号: echo 或 echo()
  • print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()

不同点:

  • print_r()方法可以输出复杂数据类型
  • echo - 可以输出一个或多个字符串
  • print - 只允许输出一个字符串,返回值总为 1
  • echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");

echo $txt1;
echo "<br>";
echo "在 $txt2 学习 PHP ";
echo "<br>";
echo "我车的品牌是 {$cars[0]}";
?>

//学习 PHP
//在 RUNOOB.COM 学习 PHP
//我车的品牌是 Volvo

字符串可以包含 HTML 标签

数据类型

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

var_dump() 函数返回变量的数据类型和值

<?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);
?> 

//int(5985)
//int(-345)
//int(140)
//int(39)

PHP 字符串

可以将任何文本放在单引号和双引号中

PHP 整型

  1. 整数是一个没有小数的数字
  2. 整数可以是正数或负数
  3. 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)

PHP 浮点型

浮点数是带小数部分的数字,或是指数形式

<?php 
$x = 10.365;
var_dump($x);
echo "<br>"; 

$x = 2.4e3;
var_dump($x);
echo "<br>"; 

$x = 8E-5;
var_dump($x);
?>

PHP 布尔型

  • $x=true;
  • $y=false;

PHP 数组

在 PHP 中,array() 函数用于创建数组:

  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列
  • 在 PHP 中,有三种类型的数组:
    1. 数值数组(索引数组) - 带有数字 ID 键的数组
    2. 关联数组 - 带有指定的键的数组,每个键关联一个值
    3. 多维数组 - 包含一个或多个数组的数组

PHP 数值数组

  1. 自动分配 ID 键(ID 键总是从 0 开始)
    $cars=array("Volvo","BMW","Toyota");
  2. 人工分配 ID 键:
    $cars[0]="Volvo";
    $cars[1]="BMW";
    $cars[2]="Toyota";
    

例:

<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>
//I like Volvo, BMW and Toyota.

count(数组名)

count() 函数用于返回数组的长度(元素的数量)

count($cars);

遍历数值数组

使用 for 循环

<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
 
for($x=0;$x<$arrlength;$x++)
{
    echo $cars[$x];
    echo "<br>";
}
?>
//Volvo
//BMW
//Toyota

PHP 关联数组

关联数组是使用您分配给数组的指定的键的数组。

方法一:

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

方法二:

$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

遍历关联数组

使用 foreach 循环

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value)
{
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>
//Key=Peter, Value=35
//Key=Ben, Value=37
//Key=Joe, Value=43

js的foreach遍历数组:

var arr = [2, 3, 6, 4]
arr.forEach((element,i) => {
    console.log(i+"---"+element);

});

多维数组

在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组。

一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组。依照这种方式,我们可以创建二维或者三维数组:

<?php
// 二维数组:
$cars = array
(
    array("Volvo",100,96),
    array("BMW",60,59),
    array("Toyota",110,100)
);
print_r($cars);
?>
//Array
//(
//    [0] => Array
//        (
//            [0] => Volvo
//            [1] => 100
//            [2] => 96
//        )
//
//    [1] => Array
//        (
//            [0] => BMW
//            [1] => 60
//            [2] => 59
//        )
//
//    [2] => Array
//        (
//            [0] => Toyota
//            [1] => 110
//            [2] => 100
//        )

//)

自动分配 ID 键的多维数组:

<?php
$sites = array
(
    "runoob"=>array
    (
        "菜鸟教程",
        "http://www.runoob.com"
    ),
    "google"=>array
    (
        "Google 搜索",
        "http://www.google.com"
    ),
    "taobao"=>array
    (
        "淘宝",
        "http://www.taobao.com"
    )
);
print("<pre>"); // 格式化输出数组
print_r($sites);
print("</pre>");
?>
echo $sites['runoob'][0] . '地址为:' . $sites['runoob'][1];

//Array
//(
//    [runoob] => Array
//        (
//            [0] => 菜鸟教程
//            [1] => http://www.runoob.com
//        )
//
//    [google] => Array
//        (
//            [0] => Google 搜索
//            [1] => http://www.google.com
//        )
//
//    [taobao] => Array
//        (
//            [0] => 淘宝
//            [1] => http://www.taobao.com
//        )
//)

//  菜鸟教程地址为:http://www.runoob.com

PHP 对象

在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。

然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:

<?php
//声明对象
class Car
{
//给对象color属性
    var $color;
    //给对象__construct()方法,传入color参数
    function __construct($color="green") {
    //$this指向Car的实例对象
      $this->color = $color;
    }
    /给对象what_color()方法,向外返回color
    function what_color() {
      return $this->color;
    }
}
//创建print_vars()函数,拿到实例对象的color并打印
function print_vars($obj) {
   foreach (get_object_vars($obj) as $prop => $val) {
     echo "\t$prop = $val\n";
   }
}

// 实例一个对象
$herbie = new Car("white");

// 显示 herbie 属性
echo "\therbie: Properties\n";
print_vars($herbie);//herbie: Properties color = white
?>

PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。

PHP NULL 值

  • NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
  • NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
  • 可以通过设置变量值为 NULL 来清空变量数据:

PHP类型比较

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

PHP 5 常量

  • 常量值被定义后,在脚本的其他任何地方都不能被改变
  • 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
  • 量在整个脚本中都可以使用,即常量是全局的

define() 函数: 设置常量

bool define ( string $name , mixed $value ,[ bool $case_insensitive = false ] )

  • name:必选参数,常量名称,即标志符。
  • value:必选参数,常量的值。
  • case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。

字符串变量

PHP 并置运算符 .

<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
//Hello world! What a nice day!

PHP strlen() 函数

strlen() 函数返回字符串的长度(字符数)。

PHP strpos() 函数

  • 用于在字符串内查找一个字符或一段指定的文本。
  • 如果在字符串中找到匹配,该函数会返回第一个匹配的字符索引。如果未找到匹配,则返回 FALSE。

echo strpos("Hello world!","world"); //6

PHP 算术运算符、赋值运算符、自增/自减运算符、比较运算符、逻辑运算符、三元运算符、运算符优先级和JS一样

括号的使用

我们通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

判断语句,条件分支语句和循环语句也和js一样

PHP 超级全局变量

  1. $GLOBALS
  2. $_SERVER
  3. $_REQUEST
  4. $_POST
  5. $_GET
  6. $_FILES
  7. $_ENV
  8. $_COOKIE
  9. $_SESSION

$GLOBALS

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键,在一个PHP脚本的全部作用域中都可以访问

<?php 
$x = 75; 
$y = 25;
 
function addition() 
{ 
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}
 
addition(); 
echo $z; //100
?>

$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

例:

  • $_SERVER['PHP_SELF']----当前执行脚本的文件名
  • $REQUEST_METHOD----访问页面使用的请求方法;例如,“GET”, “HEAD”,“POST”,"PUT
  • $_SERVER['REMOTE_ADDR']----浏览当前页面的用户的 IP 地址。
  • $_SERVER['SERVER_PORT']----Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。

点我查看更多$_SERVER 变量中的重要元素

$_REQUEST

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

例:

<input type="text" name="fname">

$name = $_REQUEST['fname'];

使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:

$_POST

PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“post”。

$_GET

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method=“get”。

$_GET 也可以收集URL中发送的数据。例:
<a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>

PHP 函数

在 PHP 中,提供了超过 1000 个内建的函数。

创建 PHP 函数

<?php
function functionName()
{
    // 要执行的代码
}
?>

PHP 函数准则:

  • 函数的名称应该提示出它的功能
  • 函数名称以字母或下划线开头(不能以数字开头)

添加参数

<?php
function writeName($fname)
{
    echo $fname . " Refsnes.<br>";
}
 
echo "My name is ";
writeName("Kai Jim");
echo "My sister's name is ";
writeName("Hege");
echo "My brother's name is ";
writeName("Stale");
?>
// My name is Kai Jim Refsnes.
// My sister's name is Hege Refsnes.
// My brother's name is Stale Refsnes.

如需让函数返回一个值,请使用 return 语句

<?php
function add($x,$y)
{
    $total=$x+$y;
    return $total;
}
 
echo "1 + 16 = " . add(1,16);
?>
// 1 + 16 = 17

PHP 魔术常量

PHP 向它运行的任何脚本提供了大量的预定义常量。

不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

常量 含义
LINE 文件中的当前行号。
FILE 文件的完整路径和文件名。
DIR 文件所在的目录。
FUNCTION 函数被定义时的名字
CLASS 类的名称
TRAIT Trait 的名字
METHOD 类的方法名
NAMESPACE 当前命名空间的名称
<?php
namespace MyProject;
 
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
?>
//命名空间为:"MyProject"

PHP 命名空间(namespace)

命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。语法格式如下;

<?php  
// 定义代码在 'MyProject' 命名空间中  
namespace MyProject;  
 
// ... 代码 ...  

你也可以在同一个文件中定义不同的命名空间代码,如:

<?php  
namespace MyProject;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }

namespace AnotherProject;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>  

不建议使用这种语法在单个文件中定义多个命名空间。建议使用下面的大括号形式的语法。

<?php
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}

namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>

将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来,例如:

<?php
namespace MyProject {

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}

namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。

<?php
declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject {

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}

namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

以下代码会出现语法错误:

<html>
<?php
namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
子命名空间
与目录和文件的关系很像,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:

<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间

const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */  }

?>

上面的例子创建了常量 MyProject\Sub\Level\CONNECT_OK,类 MyProject\Sub\Level\Connection 和函数 MyProject\Sub\Level\Connect。

PHP 对象

PHP 类定义

语法:

<?php
class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>
  • 类使用 class 关键字后加上类名定义。
  • 类名后的一对大括号({})内可以定义变量和方法。
  • 类的变量使用 var 来声明, 变量也可以初始化值。
  • 函数定义类似 PHP函数的定义,但函数只能通过该类及其实例化的对象访问。

PHP 中创建对象

实例:

<?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;
  
  /* 成员函数 $this代表自身的对象*/
  function setUrl($par){
     $this->url = $par;
  }
  
  function getUrl(){
  //PHP_EOL 为换行符。
     echo $this->url . PHP_EOL;
  }
  
  function setTitle($par){
     $this->title = $par;
  }
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}
?>
//使用 new 运算符来实例化该类的对象:
$runoob = new Site;
$taobao = new Site;
$google = new Site;
//调用成员方法
/ 调用成员函数,设置标题和URL
$runoob->setTitle( "菜鸟教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );

$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );

// 调用成员函数,获取标题和URL
$runoob->getTitle();//菜鸟教程
$taobao->getTitle();//淘宝
$google->getTitle();//Google 搜索

$runoob->getUrl();//www.runoob.com
$taobao->getUrl();//www.taobao.com
$google->getUrl();//www.google.com

PHP 构造函数

构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。

PHP 5 允许开发者在一个类中定义一个方法作为构造函数,语法格式如下:

void __construct ([ mixed $args [, $... ]] )

//通过构造方法来初始化 $name 和 $age 
    class Person{
        var $name,$age;
        function __construct( $name,$age ) {
            $this->name = $name;
            $this->age = $age;
        }
        function print_obj(){
            echo $this->name,$this->age;
        }
    }
$per = new Person("xm",13);
$per->print_obj()

析构函数

当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

void __destruct ( void )

header('content-type:text/html;charset=utf-8');
    class MyDestructableClass {
        function __construct() {
            print "构造函数\n";
            $this->name = "MyDestructableClass";
        }
        
        function __destruct() {
            print "销毁 " . $this->name . "\n";
        }
        function text(){
            echo 'ok';
        }
    }
    $obj = new MyDestructableClass();
    $obj->text()
    //构造函数 ok销毁 MyDestructableClass

继承

PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:
class Child extends Parent { // 代码部分 }

header('content-type:text/html;charset=utf-8');
    class Father {
        var $name,$age;
        function __construct($name,$age){
            $this->name = $name;
            $this->age = $age;
        }
        function sayHi(){
            echo "你好,我是".$this->name."今年".$this->age ."岁"." </br>";
        }
    }
    class Son extends Father {
        var $skin;
        // 初始化变量
        function __construct($name,$age,$skin){
            // 子类调用父类的构造函数
            parent::__construct($name,$age);
            // parent::sayHi(); // 调用父类方法
            $this->skin = $skin;
        }
        function study(){
            echo "作为".$this->skin."我应该好好学习,天天向上";
        }
    }
    $son1 = new Son("xm",3,"yelLowman");
    $son1->sayHi();
    $son1->study();

方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

访问控制

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

  • public(公有):公有的类成员可以在任何地方被访问。
  • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
  • private(私有):私有的类成员则只能被其定义所在的类访问。

类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。

类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

  • json_decode():解码 —— 字符串变为php中的对象
  • json_encode():编码 —— php对象变为字符串
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!