PHP---基础

一\简述

PHP可以内嵌在Html文档中的任何位置。
PHP 脚本以<?php 开头,以 ?> 结尾。

例子:

复制代码
<!DOCTYPE html>
<html>
<body>

<h1>我的第一张 PHP 页面</h1>

<?php
echo 'Hello World!';  // 输出 Hello World!
?>

</body>
</html>
复制代码

php的注释:// 单行    /*多行*/    # 单行

<?php
    echo 'This is a test'; // This is a one-line c++ style comment
    /* This is a multi line comment
       yet another line of comment */
    echo 'This is yet another test';
    echo 'One Final Test'; # This is a one-line shell-style comment
?>

PHP只有变量大小写敏感。
所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感。

PHP变量以$符号开头。

PHP是弱类型语言,无需声明类型。

PHP变量名称大小写敏感。

 

PHP 变量规则:

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>

 

变量的作用域是脚本中变量可被引用/使用的部分。

PHP 有四种不同的变量作用域:

  • local
  • global  
  • static
  • parameter

 

 

函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问

函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问

 

复制代码
<?php
$x=5; // 全局作用域

function myTest() {
  $y=10; // 局部作用域
  echo "<p>测试函数内部的变量:</p>";
  echo "变量 x 是:$x";    // 输出 变量x是:
  echo "<br>";
  echo "变量 y 是:$y";    // 输出 变量y是:10
} 

myTest();

echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";      // 输出 变量x是:5
echo "<br>";
echo "变量 y 是:$y";      // 输出 变量y是:
?>
复制代码

 

 运行结果

 

 函数内访问Global变量使用global关键字

复制代码
<?php
$x=5;
$y=10;

function myTest() {
  global $x,$y;
  $y=$x+$y;
}

myTest();
echo $y; // 输出 15
?>
复制代码

 

 使用$GLOBALS超全局变量访问全局变量

复制代码
<?php
$x=5;
$y=10;

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

myTest();
echo $y; // 输出 15
?>
复制代码

 

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

要做到这一点,请在您第一次声明变量时使用 static 关键字:有点像JavaScript的闭包

复制代码
<?php
function myTest()
{
    static $x=0;
    echo $x;
    $x++;
    echo PHP_EOL;    // 换行符
}
 
myTest(); // 0
myTest(); // 1
myTest(); // 2
?>
复制代码

 PHP定义常量:

常量是一个固定值的标识符。
有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。
常量默认是大小写敏感的。
通常,常量全部使用大写字母。
与变量不同,常量贯穿整个脚本是自动全局的。
使用 define() 函数设置常量:

    1. 首个参数定义常量的名称

    2. 第二个参数定义常量的值

    3. 可选的第三个参数规定常量名是否对大小写敏感。默认是 false,大小写敏感。

<?php
define("FOO","something");
echo FOO;
?>

 

  

PHP 中,有两种基本的输出方法:echo 和 print

  echo - 能够输出一个以上的字符串   echo 是一个语言结构,有无括号均可使用:echo 或 echo()

  print - 只能输出一个字符串,并始终返回 1  print 也是语言结构,有无括号均可使用:print 或 print()

  echo 比 print 稍快,因为它不返回任何值

二\数据类型

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

1、字符串 string  

  双引号和单引号的区别:双引号会解析里面的变量和转义字符,而单引号不会,单引号里的字符仅仅只有\(反斜杠)和'(单引号本身)需要转义:

<?php
  $str = 'Hello';

  echo 'I\'ll say $str \n';  // I'll say $str\n
  echo "I\'ll say $str \n"; //  I'll say Hello 

?>

 

  需要表示特别长的字符串的时候,可以使用heredoc和nowdoc语法,heredoc和nowdoc语法的区别相当于双引号和单引号的区别。

复制代码
<?
/*heredoc 语法
 1. 由<<<标记名......标记名包围组成
 2. 开始标记和结束标记名称要一致
 3. 结束标记必须顶格写
 4. 主体部分,会自动解析变量和转义字符
 5. 但是函数、操作符和引号则不会被解析
*/
$str = 'hello world';
echo <<<HTML
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
        <p>$str</p>
    </body>
    </html>     
    HTML;
 
?>
复制代码

 

复制代码
<?php 
/*nowdoc 语法
 1. 区别就是开始标记名要加单引号,但结束标记名不要加单引号
 2. 主体部分的变量和转义字符不会被解析
*/
echo <<<'HTML'
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
        <p>hello world</p>
    </body>
    </html>     
HTML;
 
?>
复制代码

 

heredoc和nowdoc特别适合输出很长的HTML文档,比直接以字符串的形式输出要容易阅读得多。

2、整型Integer

整数是一个没有小数的数字。

整数规则:

  • 整数必须至少有一个数字 (0-9)
  • 整数不能包含逗号或空格
  • 整数是没有小数点的
  • 整数可以是正数或负数
  • 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。

PHP 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);
?>
复制代码

 

运行结果:

 

 3、浮点类型

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

复制代码
<?php 
$x = 10.365;
var_dump($x);
echo "<br>"; 
$x = 2.4e3;
var_dump($x);
echo "<br>"; 
$x = 8E-5;
var_dump($x);
?>
复制代码

 

运行结果:

 

4、布尔类型

布尔型可以是 true 或 false。用于判断条件

$x=true;
$y=false;

 

 5、数组:

数组可以在一个变量中存储多个值。

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

 PHP数组其实一组键值对(key/value)。

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

 

或者

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

 

也可以不指定键值(key),那么默认的索引就是从0开始的有序数字:

$cars=array("Volvo","BMW","SAAB",6=>"Audi","Daewoo");

 

相当于

$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";
$cars[6]="Audi";
$cars[7]="Daewoo"; 

6、php对象:

复制代码
<?php
class Car
{
    var $color;

    // 构造器
    function __construct($color="green") {
      $this->color = $color;
    }
    function what_color() {
      return $this->color;
    }
}

function print_vars($obj) {
   foreach (get_object_vars($obj) as $prop => $val) {
     echo "\t$prop = $val\n";
   }
}

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


// 执行函数 print_vars($herbie); ?>
复制代码

 

 

  运行结果:

 

 

7、null值

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。

可以通过设置变量值为 NULL 来清空变量数据:

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

二\PHP语法

  1、运算符+、-、*、/、%、.

复制代码
<?php

$num_a = 5;
$num_b = 20;

echo $num_a + $num_b;  // 求和
echo "<br/>"; 
echo $num_b - $num_a;  // 求差
echo "<br/>";
echo $num_b * $num_a;   // 相乘
echo "<br/>";
echo $num_b / $num_a;   // 求商
echo "<br/>";
echo $num_b % $num_a;   // 求余
echo "<br/>";
echo $num_a.$num_b; // 字符串连接
echo "<br/>";

?>  
复制代码

 

运行结果:

递加递减:

  ++ x 预递增 x 加 1,然后返回 x
  x ++ 后递增 返回 x,然后 x 加 1
  -- x 预递减 x 减 1,然后返回 x
  x -- 后递减 返回 x,然后 x 减 1

 

  2、比较运算符

 

  == 是相等,值相等类型可以不同,比如'1'==1,为真。

 

 

  ===是全等,不仅值相等,类型也要相同,比如'1'===1,为假。

 

 

  !=和<>都是不等于。

 

 

  !==不全等,类型不同就是不全等。

  PHP7加入的运算符:组合比较符

      a<=>b,a小于b时,等于-1,

    a<=>b, 等于b于0,

    a<=>b, a大于b时, 大于1

  列子:

复制代码
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
 
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
 
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
 
// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
 
// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0
 
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1
 
$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1
 
// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 1
?>
复制代码

 

 

   3\逻辑运算符

  x and y  x && y 与  如果都为true,则返回true

  x or y        x || y      或  如果x或y有一个是真的, 则返回true

  !( x == y )   非    如果x==y为true,则返回false

  x xor y 异或      如果 x 和 y 有且仅有一个为 true,则返回 true

  例子:

复制代码
<?php
  $x = true;
  $y = false;

  echo ($x and $y); //
  echo "<br/>";
  echo ($x && $y); //
  echo "<br/>";
  echo ($x or $y); //
  echo "<br/>";
  echo ($x || $y); //
  echo "<br/>";
  echo !($x == $x); //
  echo "<br/>";
  echo ($x xor $y); //

?>
复制代码

 

  4\三元运算符

  (expr1) ? (expr2) : (expr3)

  
expr1 结果为真,执行 expr2, 结果为假 执行 expr3
<?php
  $x = 1;
  $y = 2;

  $z = ($x > $y) ? 100 : 0; // 如果x大于y 那么z = 100 否则 z = 0
  echo $z; 
?>

 

输出0;

  5\流程控制

  for循环:

 <?php
    for ($a = 5; $a > 1; $a--) {
      echo "This is for";
      echo "<br/>";
    }
?>

 

 

  while循环

  do while循环

复制代码
<?php
    $a = 5;         //先判断$a是否大于5,如果大于5则执行。
    while($a > 1){
    echo "This is  while.";
    echo "<br/>";
    $a--;
  }

  do               //先执行do之内的语句,然后进行判断。至少执行一次
  {
    echo "This is do…while.";
    $a--;
    echo "<br/>";
  } while ($a > 1);

?>
复制代码

 

  switch开关

复制代码
<?php
   
   $a = 9;

   switch($a) {
      case $a == 10;
        echo "满意";
      break;
      case $a < 10 && $a >= 8;
        echo "好";
      break;
      case $a < 5;
        echo "差";
      break;
   }

?>
复制代码

  if else 条件语句

复制代码
<?php
  $a = 9;
  if ($a == 10) {
    echo "满意";
  } else {
    echo "不满意";
  }
  echo "<br>";
  if($a >= 8) {
    echo "满意";
  } elseif($a < 8 && $a >5) {
    echo "一般";
  } else {
    echo "差";
  }
?>
复制代码

 

PHP中主要有三种转移控制语句:break、continue和return。

break语句用于结束当前循环,break可以接受一个可选的数字参数来决定跳出几重循环。

Continue用于跳出本次循环,与break不同的是,continue跳出后将继续执行下一次循环。

Return语句 Return语句用于结束一个函数或者一个脚本文件。如果在一个函数中调用return语句将立即结束这个函数的执行,并将它的值作为参数返回。

 6\函数

和弱类型语言JavaScript语法差不多,以function关键字开头,执行可以在定义的前面:

function function_name(){
// TODO:
}

 参数可以有默认值

复制代码
function setHeight($minheight=50) {
  echo "The height is : $minheight ";
}

setHeight(350);
setHeight(); // 将使用默认值 50
setHeight(135);
setHeight(80);
?>
复制代码

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

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

 

7\面向对象

PHP 定义类通常语法格式如下:

复制代码
<?php
class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>
复制代码

 

  类使用 class 关键字后加上类名定义。

  类名后的一对大括号({})内可以定义变量和方法。

  类的变量使用 var 来声明, 变量也可以初始化值。

  函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。

  

构造函数是名为__construct的函数,它有两个下划线

析构函数是名为__destruct的函数,它有两个下划线

默认访问权限是public。

  public 公用的,类外部\子类都可以使用

  protected 受保护的,子类可以使用,类外部不能使用

  private 私有的,只有当前类可以说使用

使用->访问类的成员。

parent关键字表示父类。

final关键字表示该函数不能重载。

static修饰的方法和属性可以不实例化就访问。

abstract关键字修饰抽象类,抽象类不能实例化。

extends 继承关键字

复制代码
/**
 * Define MyClass
 */
class MyClass
{
    // 声明一个公有的构造函数
    public function __construct() { }

    // 声明一个公有的方法
    public function MyPublic() { }

    // 声明一个受保护的方法
    protected function MyProtected() { }

    // 声明一个私有的方法
    private function MyPrivate() { }

    // 此方法为公有
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 这行能被正常执行
$myclass->MyProtected(); // 这行会产生一个致命错误
$myclass->MyPrivate(); // 这行会产生一个致命错误
$myclass->Foo(); // 公有,受保护,私有都可以执行
复制代码

 

复制代码
/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 此方法为公有
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }

    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}

class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
复制代码

 

posted @   花先生。  阅读(126)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示