PHP01基础语法与面向对象

环境搭建

nginx 是一个高性能的http服务器和反向代理服务器。即nginx可以作为一个HTTP服务器进行网站的发布处理,也可以作为一个反向代理服务器进行负载均衡。但需要注意的是:nginx本身并不会对php文件进行解析。对PHP页面的请求将会被nginx交给FastCGI进程监听的IP地址及端口,由php-fpm(第三方的fastcgi进程管理器)作为动态解析服务器处理,最后将处理结果再返回给nginx。即nginx通过反向代理功能将动态请求转向后端php-fpm,从而实现对PHP的解析支持,这就是Nginx实现PHP动态解析的基本原理。
详细链接

安装php

https://www.php.net/downloads.php

安装nginx

http://nginx.org/en/download.html

配置

1、需要配置nginx.conf文件

server {
    listen       8000 backlog=4096;
    server_name  www.baidu.com localhost;
    access_log logs/access.log main;
    root   /home/leimengyao/api/app/htdocs;
 
    location / {
        index  index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$args;
    }
 
    location ~ \.php$ {
        #fastcgi_pass   127.0.0.1:9000;
        fastcgi_pass unix:/home/leimengyao/php7/var/run/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/leimengyao/api/app/htdocs$fastcgi_script_name;
        include        fastcgi_params;
    }
 
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    location ~ /\.ht {
        deny  all;
    }
}

基础语法注意点

三种语法

PHP 脚本可以放在文档中的任何位置。
PHP 脚本存放位置
<% %>

<? ?>

以上两种需要在配置文件中开启(ASP),以上用的比较少

<script language="php"></script>

 <?php   ?>  //最常使用

变量

变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分大小写的($y 和 $Y 是两个不同的变量)

弱类型语言
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。

变量作用域
local
global
static
parameter

预定义变量

    $_GRT get请求提交的数据
    $_POST post请求提交的数据
    $_REQUEST get与post请求提交的数据
    $_GLOBALS PHP中所有的全局变量
    $_SERVER 服务器的信息
    $_SESSION session会话信息
    $_COOKIE cookie会话信息
    $_ENV 环境信息
    $_FILES 文件上传的信息

打印语句

  • echo(): 可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。
  • print(): 函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。
  • print_r():
    可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"\n"。因此用var_dump()函数更适合调试。
  • var_dump():
    判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
  • echo
    是语法结构,也就是关键字,不是函数。使用的时候不用加括号,加上也可以。显示多个值的时候可以用逗号隔开。只支持基本类型,布尔型除外,echo true的时候显示1,echo false的时候啥都没有。

print 和 echo 基本一致。但是print 不支持逗号分隔多个显示变量的语法。

print_r 是函数,不仅可以打印变量的的值,还能显示变量类型,而且也可以显示数组和对象这样复杂的变量类型。print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。

两者相同点:
echo 和 print 都是语言结构(官方文档解释为language construct);
echo 和 print 都是用来输出字符串的;
当同时只有一个参数的时候,echo 和 print 后面的括号(parenthesis)都是可选的,即:echo ($argument1) 等价于 echo $argument1,print(argument)等价于print argument;
echo 和 print 在输出之前,都会将参数的进行转换,尝试转换为字符串类型。

两者的区别:
echo能接受N个字符串类型的参数(注意:有多个参数的时候,不能使用括号,即echo a r g 1 , arg1, arg1,arg2是正确的,echo( a r g 1 , arg1, arg1,arg2)会导致解析错误); print只能接收1个字符串类型的参数;
echo没有返回值; print有返回值,其值永远为int类型的1。
在这里引用PHP官方原文档的说明 : “The major differences to echo are that print only accepts a single argument and always returns 1.”

关于PHP EOF

<?php
$name="变量会被解析";
$a=<<<EOF
$name<br><a>html格式会被解析</a><br/>双引号和Html格式外的其他内容都不会被解析
"双引号外所有被排列好的格式都会被保留"
"但是双引号内会保留转义符的转义效果,比如table:\t和换行:\n下一行"
EOF;
echo $a;
?> 

数据类型

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

进制转换

	整型定义 保存的数据有范围限制,4个字节存储数据,可以区分符号
	十进制:$a = 110;
	二进制:$a = 0b110;
	八进制:$a = 0110;
	十六进制:$a = 0x110; 
	
	$int01 = 110;
	$int02 = 0b110;
	$int03 = 0110;
	$int04 = 0x110;
	echo "<hr/>",$int01,"-",$int02,"-",$int03,"-",$int04; //页面上表示的数据都是以十进制进行表示的
	/*
	进制的转换
	10——>2  10/2=5...0  5/2=2...1 2/2 = 1...0 1/2 = 0...1   1010  需要补足到32位 00000000  00000000  00000000 00001010 
	
	PHP内置了很多转换函数
	Decbin() 10->2
	Decoct() 10->8
	Dechex() 10->16
	Bindec() 2->10
	*/
	echo "<hr/>",Decbin($int01);

比较

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

设置常量

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:

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

常量是可以全局访问的

php字符串

<?php
	//链接字符串
	$txt1 = "Hello";
	$txt2 = "World";
	$txt3 = $txt1.$txt2;
	echo $txt3;
	//空格
	echo PHP_EOL;
	//获取字符串长度
	echo strlen($txt3);
	//中文的长度与编码相关 utf-8一个中文三个字节
	$txt = "你好!";
	//空格
	echo PHP_EOL,strlen($txt);
	//获取字符串出现的位置
	echo PHP_EOL,strpos($txt3,$txt2);
?>

字符串更多函数参考

运算符

https://www.runoob.com/php/php-operators.html

流程控制

if (条件)
{
    if 条件成立时执行的代码;
}
elseif (条件)
{
    elseif 条件成立时执行的代码;
}
else
{
    条件不成立时执行的代码;
}


<?php
switch (n)
{
case label1:
    如果 n=label1,此处代码将执行;
    break;
case label2:
    如果 n=label2,此处代码将执行;
    break;
default:
    如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>

数组

数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组

//定义一个数据数组
	$array01 = array("first","second","third");
	//显示类型与值
	var_dump($array01);
	//遍历数组
	for($i=0;$i<count($array01);$i++) {
			echo "<br/>",$array01[$i];
	}
	echo "<br/>";
	//定义一个关联数组
	$array02 = array("zyx"=>"22","hq"=>"18");
	//显示类型与值
	var_dump($array02);
	//遍历数组
	foreach($array02 as $x => $x_value){
		echo "<br/>",'key'.'-->'.$x.' '.'value'.'-->'.$x_value;
	}

数组排序

sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列

//php冒泡排序算法
	$nums = array(1,81,7,5,1,2,3,6,8);
	//获取数组的长度
	$length = count($nums);
	for($i=0;$i<$length;$i++){
		for($j=$i;$j<$length;$j++){
			if($nums[$i]>$nums[$j]){
				$nums[$i]=$nums[$i]+$nums[$j];
				$nums[$j]=$nums[$i]-$nums[$j];
				$nums[$i]=$nums[$i]-$nums[$j];
			}
		}
	}
	var_dump($nums);

php超级全局变量

$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION

$GLOBALS

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

//测试$GLOBALS
	$var1=12;
	$var2=13;
	//定义函数
	function test() {
		global $var1,$var2;
		echo $var1."--".$var2;
	}
	//执行test
	test();
	//查看$GLOBALS的值
	var_dump($GLOBALS);
$_SERVER

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

$_REQUEST

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

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:

<html>
<body>
 
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
 
<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>
 
</body>
</html>
$_POST

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

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据

<html>
<body>
 
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
 
<?php 
$name = $_POST['fname']; 
echo $name; 
?>
 
</body>
</html>
$_GET

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

<html>
	<body>
		<a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>
	</body>
</html>
<html>
	<body>
		<?php 
		echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
		?>
	</body>
</html>

PHP函数

//递归函数
	function add($num) {
		if($num<1) {
			return 0;
		}
		return $num+add($num-1);
	}
	echo add(5);

PHP魔术常量

PHP 向它运行的任何脚本提供了大量的预定义常量。
不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

//__DIR__ 表示当前文件所在系统的绝对路径
//__FILE__ 表示当前文件所在系统的绝对路径(包括自身文件的名称)
//__LINE__ 表示当前常量所在的行数
//__NAMESPACE__ 表示当前文件所在的命名空间
//__CLASS__ 表示当前文件所在的类
//__METHOD__ 表示当前文件所在的方法

命名空间

  • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  • 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

PHP面向对象

在这里插入图片描述
Java面向对象与之类似

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

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

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

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

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

构造函数

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

析构函数

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

访问控制

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

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

接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

通过类来获取常量

可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。

<?php

class ClassConst
{
    const flag = "flag";

    function test() {
        echo self::flag.PHP_EOL;
    }
}

//通过new来调用
$test = new ClassConst();
$test->test(); //flag
echo $test::flag.PHP_EOL;

//通过类名来获取常量
echo ClassConst::flag.PHP_EOL;

//通过变量来获取
$var = "ClassConst";
echo $var::flag;

抽象类

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。

<?php
    /*
    任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
    定义为抽象的类不能被实例化。
    被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
    继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。
    例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
    */
abstract class PrintFactory
{
    private $txt;

    /**
     * @return mixed
     */
    public function getTxt()
    {
        echo $this->txt.PHP_EOL;
    }

    /**
     * @param mixed $txt
     * protected修饰说明子类可以访问到
     */
    protected function setTxt($txt): void
    {
        $this->txt = $txt;
    }

    //抽象方法
    abstract function DivPrint();
}

class MyPrint extends PrintFactory
{
    function DivPrint()
    {
        // TODO: Implement DivPrint() method.
        parent::setTxt("调用一下抽象类的方法");
        echo parent::getTxt();

        //自定义
        echo "hello";
    }
}

$myPrint = new MyPrint();
$myPrint->DivPrint();

static关键字

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。

<?php
/*
    声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
    静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
    由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
    静态属性不可以由对象通过 -> 操作符来访问。
    自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。
 */
class TestStatic
{
    //定义一个静态变量
    public static $txt;
    //定义一个普通的变量
    public $var;
    /**
     * @return mixed
     */
    public function getVar()
    {
        return $this->var;
    }
    /**
     * @param mixed $var
     */
    public function setVar($var): void
    {
        $this->var = $var;
    }
    function getTxt(){
        echo self::$txt;
    }
    static function setTxt($param){
        self::$txt=$param;
    }
}
//静态变量,方法通过类直接调用
TestStatic::setTxt("hello world");
TestStatic::setTxt("hello world!!!");
echo TestStatic::$txt.PHP_EOL;

$test = new TestStatic();
$test->getTxt();

//hello world!!!
//hello world!!!

final关键字

父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值