PHP学习2——基本语法
主要内容:
- 二进制
- 数据类型
- 变量
- 常量
- 赋值
- 语句结构
- 函数
网站的核心功能是展现信息,文字,图片,视频,音频,对于计算机来说都是数据,这些数据按照二进制进行存储。
二进制
就是1100,0100,1010这样的数据就是二进制数,二进制数分为有符号数、无符号数。原码,反码,补码是有符号数才有的表示方法。
对于正数:原码=反码=补码
原码:0100,0100,1010 反码:0100,0100,1010 补码:0100,0100,1010
对于负数:原码!=反码,反码+1=补码
原码:1100,0100,1010 反码:1011,1011,0101 补码:1011,1011,0110
数据类型
整数(10112),浮点数(12.34),字符串("cat"/‘cat’)
变量
使用$符号申明变量,以英文字母或者_(下划线)开头,后面可是是英文字母,数字,下划线,比如$score,$mark,$name,$Password
php预定义变量:
- $GLOBALS(当前程序中全局变量)
- $SERVER(全局变量,包含头信息,脚本位置的数组)
- $_COOKIE(通过http的cookie方法提交到脚本的变量)
$_SERVER常见的$_SERVER的元素包括:
- PHP_SELF(当前正在执行的脚本的文件名)
- SERVER_ADD(当前执行脚本所在服务器ip)
- DOCUMENT_ROOT(当前脚本所在文档根目录)
- SCRIPT_FILENAME(当前执行脚本绝对路径)
demo2.php
<?php $a="this is test!"; echo "通过\$GLOBALS来获取变量值:"; echo $GLOBALS['a']."<br/>"; echo "当前执行脚本的文件名:"; echo $_SERVER['PHP_SELF']."<br/>"; echo "当前执行脚本的跟目录:"; echo $_SERVER['DOCUMENT_ROOT']."<br/>"; echo "当前执行脚本的绝对路径:"; echo $_SERVER['SCRIPT_FILENAME']."<br/>"; ?>
启动xampp的控制面板,运行Apache,绿色说明是正常运行
将文件拷贝的xampp的htdocs下
打开浏览器输入:http://localhost/demo2.php
常量
const name=value;
比如:const MONEY_RATE=0.5;
常用预定义常量
- __FILE__(放回当前文件名称,注意下划线是两个)
- __LINE__(返回当前代码所在行号,注意下划线是两个)
- __FUNCTION__(返回所在函数的名称,注意下划线是两个)
- __CLASS__(返回所在的类名,注意下划线是两个)
- PHP_OS(返回操作系统名称)
- TRUE(布尔值,真)
- FALSE(布尔值,假)
- NULL(空值)
demo3.php
<?php echo "当前文件所在位置:".__FILE__."<br/>"; echo "当前操作系统是:".PHP_OS; ?>
赋值
赋值最基本的运算
demo4.php
<?php $a="this is test!";//申明变量,并赋值 $b; $b='this is test!';//先申明变量,后赋值 $c=$a;//使用一个变量给另一个变量赋值 ECHO $a."<br/>"; echo $b."<br/>"; echo $c."<br/>"; ?>
输出:
字符串单引号和双引号
单引号的变量做字符串处理,双引号变量会解析出来
demo5.php
<?php $a="this is test!"; $b=10; echo '$a'.'<br/>'.'$b'."<br/>"; echo "$a".'<br/>'."$b"."<br/>"; ?>
输出
语句结构
PHP语句通常是表达式组成,语句;(英文分号)结尾,不加会报错。
条件构成
关系运算:>(大于),<(小于),==(等于),===(全等于,包括类型),<>或!=(不等于),!==(非全等于,左右操作数数值或者类型不相等,返回真)
逻辑运算
- and/&&/&(逻辑与true&true==>true)
- or/||/|(逻辑或false||false==>false)
- not/!(逻辑非!true==>false)
- xor/^(逻辑异或,true^false==>true ,false^true==>true,false^false==>false)
逻辑与(&&)的短路原则:
- exp1&&exp2,如果exp1为false,则exp2不执行,直接返回false
分支结构
- if语句
- if-else语句
- if-elseif-else语句
- switch语句
demo6.php
<?php $a=5; $b=10; if($a>$b){ echo '$a大于$b'; }else{ echo '$a小于$b'; } ?>
输出$a小于$b
循环结构
while语句
do-while语句
for语句
demo7.php
<?php //for循环 for($i=0;$i<10;$i++){ echo 'good! '; } ?>
输出good! good! good! good! good! good! good! good! good! good!
函数
PHP的函数很好用,不用申明返回数据的类型(当然这是优点也是缺点,不过我认为还是优点,减少了代码量啊,有没有!而且还不用想破头到底应该返回什么类型数据,而且PHP的输出支持链式调用,太方便了啊!)
函数把一个完整的功能多条语句封装成一个模块,函数使用function来申明
demo8.php
<?php //输出n次变量a function printString($a,$n){ //for循环 for($i=0;$i<$n;$i++){ echo "$a"; } } //调用函数 printString("good! ",5); printString("<br/>",2); printString("apple and pear! ",1); ?>
输出
这个时候的函数参数为值传递,就是一个copy,在函数内部改变这个值不会影响到外部的变量的值,但是如果我们想要在函数内部改变外部的值,需要引用传递,将参数的引用路径地址&a传入
demo.9.php
<?php //交换$a,$b位置 function swap(&$a,&$b){ echo "交换前:".'$a='.$a.'$b='.$b; echo '<br/>'; $temp=$a; $a=$b; $b=$temp; echo "交换后:".'$a='.$a.'$b='.$b; } $a=5; $b=9; //调用 swap($a,$b) ?>
输出
交换前:$a=5$b=9 交换后:$a=9$b=5
全局变量
函数中不能直接使用全局变量,如果需要在函数中使用申明的全局变量,需要加前缀global
<?php $a=100; //输出全局变量a function gbl(){ global $a; echo $a; } //调用 gbl(); ?>
输出
100
静态变量
函数外不能直接使用函数内部的变量,如果需要在函数外使用申明的函数中的变量,函数中变量需要加前缀static
<?php //输出静态变量a function stc(){ static $a=0; $a++; echo $a.','; } //调用 stc(); stc(); stc(); stc(); stc(); ?>
输出
1,2,3,4,5,
返回值
PHP的函数不用声明返回值类型,真方便!
<?php //返回字符型 function reutrnString(){ return "today is sunday."; } //返回数字 function returnNum(){ return 1024; } //调用 $a=reutrnString(); echo "\$a=$a"."<br/>"; $a=returnNum(); echo "\$a=$a"; ?>
输出
$a=today is sunday. $a=1024
函数引用返回
需要在申明函数的时候,在函数前面在&(取地址符号)
(这个有点变态,直接操作引用地址,用起来出错了怎么搞)
<?php //返回数字 function &returnNum(){ static $b=0; $b=$b+1; echo $b.'<br/>'; return $b; } //调用 $a=returnNum(); //使用& $a=&returnNum(); $a=1000; $a=returnNum(); ?>
输出
1 2 1001
可变函数
需要在调用函数的时候在前面加$(申明变量符号),调用同一个函数,但是却执行的是不一样的代码,
这个技术太牛逼!要是可以在配置文件中对变量进行修改,那么就可以动态的决定要执行那个函数,根据需求动态的修改程序,牛!!!
(这个更加变态,不说了,看代码)
<?php //返回字符型 function reutrnString(){ echo "today is sunday.<br/>"; } //返回数字 function returnNum(){ echo 1024; } function hello(){ echo '你好'; } //调用 $func='reutrnString'; $func(); $func='returnNum'; $func(); $func='hello'; $func(); ?>
输出
today is sunday. 1024你好
递归函数
就是函数自己调用自己,没有什么好说的,在一些算法中为了简化可能会用到,但是递归调用的代码执行效率极低,不建议使用
<?php //递归 function add(){ static $a=0; $a++; echo '$a='.$a.","; if($a>10){ return; } //调用自己,直到满足条件 add(); } add(); ?>
输出
$a=1,$a=2,$a=3,$a=4,$a=5,$a=6,$a=7,$a=8,$a=9,$a=10,$a=11,
系统函数
就是PHP将一些常用的函数封装好了,不用自己写了,看看API直接使用就行了。
<?php //返回最大值 $a=max(1,22,34,777,3,55); echo "1,22,34,777,3,55中最大的数是:".$a; ?>
输出
1,22,34,777,3,55中最大的数是:777
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
聊聊Java动态代理(上)
前言 在之前的文章《聊聊设计模式之代理模式》中,笔者为大家介绍了代理模式,在这里简单回顾一下。代理模式的作用是提供一个代理来控制对一个对象的访问,因此我们可以很方便地实现对一个对象的延迟加载,或者在调用一个对象的方法时加入一些业务逻辑。然而之前介绍的代理模式属于静态代理,其缺点是如果目标接口改变了,则目标类跟代理类都会受影响,不太灵活。不过在Java中还有一种代理模式叫动态代理,可以弥补静态代理的缺陷。接下来我们将进行详细介绍。 Java动态代理 在java的动态代理机制中,有两个重要的类或接口,一个是InvocationHandler接口,另一个则是Proxy类,它们是Java动态代理的基础。 我们先看下InvocationHandler接口的API介绍:每个代理类的实例都关联到了一个InvocationHandler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandler这个接口的 invoke 方法来进行调用。也就是说我们必须实现该接口,并在invoke方法中实现代理逻辑。 接下来再来看下Proxy类的API介绍:Proxy类提供了创...
- 下一篇
深入理解JAVA虚拟机学习笔记(二)垃圾回收策略
上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略。 一、finailize()方法 在介绍GC策略前,先介绍下GC中的finailize方法。当对象没有任何引用的时候,通常这个对象会被回收掉,但如果我们想在对象被回收前进行一些操作,比如关闭一些资源,或者让这个对象复活,不让他被回收怎么办?这时候就要用到finailize方法了。finailize方法是Object类中定义的方法,意味着任何一个对象都有这个方法。但这个方法只会调用一次,如果把这个对象复活后再次让这个对象死亡,那第2次回收该对象的时候是不会调用finailize方法的,而且优先级比较低,并不能保证一定会被执行,因此不建议使用finalize方法。总结起来就是3个特性:①、GC之前被调用 。②、只会被调用一次。③、不可靠,不能保证被执行,不建议使用。关于finalize使用方法,参考如下代码: 1 public class FinalizeTest { 2 3 pri...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路