输出语句
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 整型
- 整数是一个没有小数的数字
- 整数可以是正数或负数
- 整型可以用三种格式来指定:十进制, 十六进制( 以 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 中,有三种类型的数组:
- 数值数组(索引数组) - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值
- 多维数组 - 包含一个或多个数组的数组
PHP 数值数组
- 自动分配 ID 键(ID 键总是从 0 开始)
$cars=array("Volvo","BMW","Toyota");
- 人工分配 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 超级全局变量
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_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 端口。
$_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对象变为字符串
来源:CSDN
作者:qq_44704740
链接:https://blog.csdn.net/qq_44704740/article/details/103464846