php入门小知识小结,PHP初学者布满难题集合

PHP目录========

1,如何连接连两个字符串?
答:在php中连接两个字符串可以直接使用“.”操作符号,例如$newStr="Zhang"."san",在java中是使用“ ”操作符号,不要混淆。
2,如何计算一个字符串的长度?
答:$str="test";$length=strlen($str);即使用strlen(str)函数。
3,如何按照某个分割符拆分一个字符串?
答:使用explode(delim,str)函数,例如$arr=explode("::","a::bdf::dfsdf");该函数返回一个数组。在java中可以使用String对象的split函数。
4,如何获取http请求中的参数值?
答:如果为GET请求,使用$_GET[paramName],如果为POST请求,使用$_POST[paramName],例如:$email=$_POST["usermail"]。
5,php中是否可以像Java一样使用类?
答:可以,但是机制和具体使用方式可能不太一样。
6,是否可以举一个使用for循环的例子?
答:

一、php可以做什么

php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。

php是一门后台编程语言,是目前比较主流的后台编程语言。

认识一下PHP及其功能。

1、运行在服务器端:学会了PHP,就可以指挥服务器给你干活,甚至是搞破坏^_^(千万不能真这么做咯),WEB网站的大部分数据都是存储在服务器端的,PHP就是用来处理这些存储在服务器的数据的(功能强大吧)。

2、跨平台:服务器可以是多种平台的服务器,比如Linux、Windows、Unix,你都可以指挥(不用怕只能指挥一种服务器啦吧)。

3、脚本语言:它是通过编写脚本,也就是一行行的计算机指令(也可以理解为特定的英文单词),来指挥服务器来工作的,因此,在编写PHP的过程其实就是与老外(服务器成老外啦)交流的过程,交流的语言就是PHP。

4、免费:免费使用(天下还真有免费的午餐)。

如果出现乱码,解决乱码需要加head头:header("Content-type:text/html;charset=utf-8");

一.Apache基础

1.网站几个的基本概念

  • 静态网站:

不支持数据交互的网站,单纯的静态文件(HTML,CSS,Js组合),后缀一般html,htm.

  • 动态网站:

支持数据交互的网站,动态网站中是可以操作静态网页的.

  • 实现动态网站的技术

    实现技术 网站后缀
    ASP asp
    PHP php
    .NET aspx
    JAVA jsp
  • 网络请求过程:

客户端给服务器发送一个请求:(HTTP请求),服务器会把静态资源(HTML代码,图片,js,css)发送到客户端(HTTP response),客户端通过浏览器解析返回的代码,呈现页面给用户.

  • 端口和端口号:

端口号范围0-65535, 1024一下的端口号一般都留给系统. 80端口一般留给web服务用, 21端口留给FTP, 25端口留给邮件服务器用.

  • 查询当前电脑打开的端口:

win: netstat -ano
mac: lsof -i

  • BS和CS架构

B: Browser 浏览器

S: Server 服务器

C: Client 客户端

BS架构:通过浏览器去访问服务器

CS架构:通过客户端软件去访问服务器

  • 前台和后台

前台: 给浏览者看到的

后台: 给管理者操作的,后台是用来操作前台的数据的.

站点:把和网站有关的素材都放到一个文件夹,此文件夹就叫站点.

  • Apache

语言的运行需要环境,Apache为PHP运行提供环境,(IIS)
亦可以为PHP提供环境,IIS是微软开发的为ASP和aspx提供环境的.

自定义安装Apache需要设置安装路径.
还可以设置配置.

一般操作有:start,stop,restart.

目录结构:

bin: apache的命令文件夹
conf: 配置文件
htdocs: 虚拟目录

httpd.conf, apache 重要的配置文件

PHP:自定义安装要配置apache配置文件的目录

  • 常见的数据库

Access(MS,微软),MySql(甲骨文),SQL Server(MS),Oracle(甲骨文)

  • lamp/wamp 更改虚拟目录(htdocs)

在Apache的配置文件中配置PHP虚拟目录的位置.

在httpd.conf配置文件中查找DocumentRoot,进行修改.指定新目录后还要设置目录的访问权限
.在Directory,找到对应的文件夹,将权限设置为allow from all.

  • 虚拟目录和站点的区别

站点:单纯的一个文件夹

虚拟目录:文件夹 权限

  • 更改首页

在Apache的配置文件查找DirectoryIndex,添加相应的文件为默认首页

更改监听端口号:

Listen port
可以监听多个端口号

listen 80

listen 90

  • DNS 解析

Domain Name System 域名解析系统,将域名解析成 ip地址.互联网上唯一标示一台计算机的是ip地址.不方便记忆,所以用域名对应一个ip地址.

客户端输入域名,首先会请求最近的DNS服务器,将域名解析成ip地址.最近的DNS解析服务器是本机.在 /etc/hosts文件下,所以可以设置虚拟域名

  • 虚拟主机

一个Apache支持多个网站,从浏览者角度看,每个网站都是一个独立的主机,称为虚拟主机.

开启虚拟主机的配置:

1.在Apache配置文件夹下 conf/extra/httpd-vhosts.conf 开启.

2.打开虚拟主机配置文件

<VirtualHost*:80>
DocumentRoot "/usr/php" //主机地址
ServerName www.hahaha.com //绑定的域名
<Directory "/usr/php">
Allow from all //设置权限
</Directory>
</VirtualHost>

  • 虚拟主机 = 站点 站点的权限 域名 端口号

php介绍 2基础 31运算符 70流程控制 77函数 91文件引入 100字符串/数组 104数据库 134交互 153新闻管理 172http协议 172目录========

复制代码 代码如下:

认识PHP代码标识

想在页面中编写PHP​代码非常容易,如下面代码:

<?php

      echo "想学习php吗?来慕课网吧";

?>

就像你可以编写JavaScript脚本语言需要写在<script></script>标签之间一样,你可以在页面中编写PHP代码写在<?php  ?>标签之间,但注意后面的?>是可以省略的。

二.PHP基础知识整理

PHP: Hypertext Preprocessor 超文本预处理器,是一种通用的开源脚本语言,PHP运行在服务器端.

  • PHP4种定界符

1.标准风格

<?php 
    //statement
?>

2.短标记风格:默认不支持,要在PHP配置文件中php.ini开启支持短标记,short_open_tag = On

<? 
    //statement
?>

3.asp风格,asp_taps = On

<% 
    //statement
%>

4.script风格

<script language="php"> 
    //statement
</script>
  • PHP 语句以分号结尾;关键字不区分大小写,变量名区分大小写.

  • 变量命名: 变量是计算机内存中的一段空间.PHP的变量名必须以$开头,$不是变量名的组成部分,仅表示PHP变量名从此处开始.除了$符号,字母,下划线开头,后面紧跟字母数字下划线.

//赋值
$a = 10;
$b = $a;
$c = &$a; //传地址
$a  ;
echo $b; //10
echo $c; //11
  • 销毁变量

通过unset()来销毁变量,销毁的是变量名.值是由PHP垃圾回收机制销毁的.

<?php 
    $a = 10;
    $b = &$a;
    unset($a);
    echo $b;    // 10
?>
  • 常量

当一个值在脚本执行周期内不发生变化,可以将值声明为常量.用关键字 define()定义,常量名不能有$开头

<?php 
    define("name","xiaoQQ");
    echo name;
?>

默认情况下常量名是区分大小写的,可以设置define的第三个参数来设置是否区分大小写的:TRUE不区分,FALSE区分大小写.常量不能重复定义

//多人合作时要判断
<?php 
    define("name","hahaha");
    if(!define("name")){
        define("name");
    }
?>

考虑和const定义常量的区别.

使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。

(1).const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。

(2).const可在类中使用,define不能。

(3).const不能在条件语句中定义常量。

  • PHP执行的原理

客户端向服务器发送一个请求,如果请求的是一个HTML页面,服务器直接将HTML页面发送到客户端给浏览器解析.如果请求的是PHP页面,服务器则会运行PHP页面然后生成标准的HTML代码发送到客户端.

  • PHP的数据类型

1.基本类型

整型integer: -231~231-1

浮点型float(double)

布尔类型boolean:TRUE,FALSE.

字符串类型string

2.复合类型

array数组:

object对象:

3.特殊类型

resource资源:PHP的外部数据

NULL无类型,空值

  • 字符串

单引号字符串是真正的字符串,双引号字符串要将变量给替换.单引号不需要运算,执行效率相对高点.

变量如果在字符串的签名或者中介,要用{}包含
否则会报错:未定义变量

<?php 
    $name = "xiaoming";
    echo "{$name} is my name";
    //or
    echo "${name} is my name";
?>
  • 数组:计算机内存中的一段连续空间,通过下标来区分数组.

数组分成:

索引数组:通过元素的位置做下标,默认从零开始,每次增长1,可以更改数组的起始下标

关联数组: 字符串做下标

<?php
    //索引数组
    $names = array("tom","ted","color","rose");

    echo $names[0],'<br>';

    //关联数组(字典)
    $emp = array("name"=>"xiaoming","gender"=>"male","age"=>23);

    echo $emp["name"],'<br>';

    $arr1 = array(1=>'a','b','c'); //修改起始下标
    //Array([1]=>a [2]=>b [3]=>c)

    $arr2 = array('a',2=>'b','c',5=>'d');

    //Array([0]=>a [2]=>b [3]=>c [5]=>d); //每次增长1

    $arr3 = array(1=>'a',1=>'b',1=>'c','d');
    //Array([1]=>c [2]=>d);  //会替换
?>
  • 输出语句 echo和print,print_r,var_dump

echo :只能输出数字,字符串,对于布尔类型,TRUE输出1,FALSE输出0,可以一次输出多个参数,没有返回值

print :和echo很类似,一次只能输出一个参数,输出成功返回1,失败返回0

print_r :用来输出数组,输出的内容包括 key 和value,不包括数据类型

var_dump :如果输出普通变量,输出的变量的值和变量的类型.如果输出的是数组,包括值,键,值的数据和类型

  • PHP注释 //单行注释 ,/**/ 多行注释

  • 运算符

一元运算符: 负号, (递增1),--(递减1)

二元运算: , - , * ,/

  • 号在js,java中可以做数字的相加,也可以做字符串相连接,在PHP中,只能做数字运算
 <?php 

    echo '10'   '20';   //30

    echo '10aa'   '20bb';   //30

    echo 'aa'   'bb';   //0

 ?>  
  • 比较运算符

, >=, <, <=, ==, !=, ===, !==

== 只比较值, === 比较值和数据类型

<?php 
   $a = 10;
   $b = 'b';
   if($a == $b){
       echo 'equal';
   }else {
       echo 'not equal';
   }
   //equal

   echo "<br>";

   if($a === $b){
       echo "全等";
   }else {
       echo "不全等";
   }
   //不全等

   echo "<br>";

   $a = "abc";
   $b = 0;

   if($a == $b){
       echo "equal";
   }else {
       echo "not equal";
   }

   //equal

?>
  • 逻辑运算符: &&(与) ||(或者) !(非)

  • 字符串拼接: .点号

  • 赋值运算符: =, =, *=, /=, %=, .=

  • 三目运算符: 表达式?值1:值2

<?php 
   $sum = 20;
   echo $um%2==0?'偶数':'奇数';  //偶数
?>
  • 判断语句

单分支: if(){}

双分支:if(){} else {}

多分支: if(){} elseif(){} ... else{}

is_numeric()判断是否是数字或者数字字符串;
is_int() 判断是否是整型

把数字字符串转换为数字 $num =0;

  • 循环语句

for(初始值;条件;增量){};

while(条件){};

do{}while(条件);

foreach :用来遍历数组

<?php

   $stu = array("tom","berry","haha","hi");
   foreach($stu as $value){
       echo $value;
   }

   foreach($stu as $key=>$value){
       echo $value;
   }

   $names = array("name"=>"xiaoming","gender"=>"male","age"=>23);

   foreach($names as $k=>$v){
       echo "{$v}=>{$v}<br>"
   }
?>
  • 函数

  • 预定义函数: php已经定义的函数,如is_numeric(),var_dump(),is_int();

  • 自定义函数

<?php 
   function functionName(parameters){
       //function body
       [return];
   }
?>
  • 解决页面乱码

1.加meta标签 <meta charset="utf-8">

2.php设置header: header('Content-Type:text/html;charset=utf-8');

  • 访问全局变量
<?php 
   $num1 = 10;
   function fun(){
       $num2 = 20;
       echo $GLOBALS["num1"] $num2222222;
   }
?>

1.php介绍1.1.概念1.1.1.personal home pagephp是运行在服务器端的脚本语言1.1.2.优点1.1.2.1.1、开源(open source)、跨平台、稳定1.1.2.1.1.经典组合 WAMP,LAMPWamp==Windows Apache MySQL PHP 本机测试的首选Lamp==Linux Apache MySQL PHP 线上生产环境1.1.2.2.2、入门简单、开发成本低1.1.2.3.3、支持大多数主流数据库MySQLoracleRedisSQL等1.1.2.4.4、框架齐全使得开发效率大大提高 如LaravelThinkPHP 国产YiiCoderlgniterSysfony1.1.2.5.5、解释形脚本语言,无需在客户端生成.dll .exe可执行文件1.1.3.缺点1.1.3.1.当项目规模较大时 维护成本较高1.1.4.版本1.1.4.1.目前市面上最多的是PHP5最新版本PHP7.2慢慢想强类型语言靠拢1.2.软件架构介绍1.2.1.C/S架构1.2.1.1.Client客户端/Server服务器 访问不同的服务器,需要各自安装不同的客户端软件。如:QQ,迅雷,百度云等1.2.1.2.优点 是访问速度快,用户直接跟数据交互1.2.2.B/S架构1.2.2.1.B/S是特殊的C/S模式。运行在浏览器端。未来软件的大趋势。百度网站,淘宝网站1.2.2.2.优点是不需要安装客户端软件 但目前手机端的网速和硬件的条件跟不上 会出现访问留白现象影响用户体验1.3.web基本概念1.3.1.网站1.3.1.1.静态网站 由静态的网页代码(html css js)组成 没有数据的交互1.3.1.2.动态网站 通过用户请求动态生成不同页面,用户跟服务器进行数据的交互1.3.2.服务器1.3.2.1.概念1.3.2.1.1.安装了服务器软件 计算机,提供服务支持 比如安装了Apache服务器软件电脑就是Apache服务器1.3.2.2.常用服务器1.3.2.2.1.Apache HTTP Server 开源的网页服务器 跨平台 安全性高 末前最流行的WEB服务器1.3.2.2.2.Nginx 轻量级高性能 占用内存小 并发能力强 常用于分布式1.3.2.2.3.ISS 微软提供的基于window的服务器软件1.3.3.协议1.3.3.1.IP1.3.3.1.1.占用四个字节 每个字段范围是0-255 每个字节占用8个比特位1.3.3.1.2.127.0.01 本机ip1.3.3.2.TCP/IP 三次握手协议 发出请求—>对方接受并回应—>接收返回信息再次返回1.3.4.域名1.3.4.1.localhost 本机1.3.4.2.便于记忆 最终通过DNS解析成ip访问1.3.4.3.DNS解析器1.3.4.3.1.将域名解析成对应的IP地址。DNS就是一台24小时运行的服务器1.3.4.3.2.DNS解析器先走本地,本地没有才访问远程dns1.3.4.4.常用 .com .cn .gov1.3.5.Host文件1.3.5.1.Host文件是隐藏的系统文件没有扩展名 C:WindowsSystem32driversetchosts1.3.5.2.本地DNS1.3.6.端口1.3.6.1.作用 监听服务1.3.6.2.一台计算有可以同时提供多种服务 如WEB FTP服务1.3.6.3.web服务端口:80MySQL服务:33061.3.7.URL1.3.7.1.概念uniform resource locator 访问互联网资源的标识符,1.3.7.2.组成1.3.7.2.1. http/https1.3.7.2.3.端口号:80 默认端口可以省略1.3.7.2.4.服务器名www.baidu.con1.3.7.2.5.资源名 index.html文件名可带参数用?分割多个参数之间用&连接 统一资源定位符 域名后面的 index.php?username=ss&password=ss1.3.8.访问流程1.3.8.1.用户发送请求—>服务响应并返回静态文件,动态问价教给php模块处理在返回—>1.4.环境搭建1.4.1.Wampserver 下载安装1.4.2.配置文件1.4.2.1.1、安装目录下binapache2.2.2confhttpd.conf去掉文件中下列注释 #Include conf/extra/httpd-vhost.conf1.4.2.2.2、配置虚拟站点安装目录下binapacheapache2.4.23confextrahttpd-vhosts.conf<VirtualHost :80>ServerName 自定义域名ServerAlias 自定义域名DocumentRoot ""服务器文件路径""DirectoryIndex index.html index.php index.htm<Directory ""服务器文件路径"">Options indexes FollowSymLinksAllowOverride AllOrder Deny,AllowAllow from all</Directory></VirtualHost>1.4.2.3.3、安装目录下binapache2.2.2confhttpd.conf 将Require all denied注释 换行添加 allow from all1.4.2.4.4、在host文件中添加域名 c:/system32/drivers/etc/host 添加 127.0.0.1 自定义域名2.基础2.1.php标记2.1.1.<?php ....?>2.1.2.PHP本身支持与HTML混编混编的文件后缀一般为.php,Apache才会调用PHP解析纯PHP文件一般省略结束标记。 在于防止结束标志后的空白字符输出混编时,先解析PHP代码,剩余代码发给浏览器解析2.1.3.单行注释//多行注释/ */2.2.变量2.2.1.概念2.2.1.1.值可以改变的量,用来存储数据的单位或者空间2.2.2.声明2.2.2.1.以$开头2.2.2.2.由英文字母、数字、下划线等多个字符组成,以字母或者下划线开头2.2.2.3.变量命名严格区分大小写 但PHP函数不区分大小写2.2.3.赋值2.2.3.1.= 赋值声明一般同时进行2.2.3.2.php是弱类型语言类型由值决定2.2.4.手动删除变量2.2.4.1.unser2.3.可变变量2.3.1.一个变量的值是另一个变量的值$a =""bb"";$bb = ""abc"";$$a --->""abc""2.4.常量2.4.1.概念 在脚本运行周期中值不会变的量 重新定义或赋值2.4.2.define const 常量名 = 值;2.5.输出语句2.5.1.解决输出乱码问题2.5.1.1.在开始php标签后指定编码格式 header(""content-type:text/html;charset=utf-8"")2.5.2.echo语句2.5.2.1.输出字符串、变量及表达式 可以同时输出多个变量及字符串。不是函数,是语言结构2.5.3.print语句2.5.3.1.可以输出字符串及变量及表达式 与echo语句的区别为:print不支持同输出多个字符串及变量。相同点:为语言结构,不是函数2.5.4.var_dump()2.5.4.1.输出一个或者多个变量的类型,长度及值 一般用于打印复杂变量(结合pre标记格式化输出如数组,对象等2.5.5.print_r()2.5.5.1.输出变量的值。一般用于打印变量。对于字符串类型、整型、浮点型,打印变量本身 不能打印布尔类型的原始值

for($i=0;$i<100;$i ){
echo $i;
}

输出php的版本    echo    PHP_VERSION

三.数据库

数据库的发展: 文件系统(使用磁盘文件来存储数据)=>第一代数据库(出现了网状模型,层次模型的数据库)=>第二代数据库(关系型数据库和结构化查询语言)=>新一代数据库("关系-对象"型数据库);

层次模型是一种导航结构,
优点:分类管理,如果查询同一类的数据是很方便的。
缺点:如果查询很多不是同一类的数据,效率就很低了
层次结构可以造成数据无效,比如张经理管理了一个员工叫张三,李经理也管理了一个叫张三,我们无法区分张三是一个人还是两个人。

网状模型解决了层次模型数据无效的问题,但是没有解决导航问题,深层率查询,效率很低.

关系模型中,每个表都是独立的,通过公共字段来建立关系。优点:表是独立的,需要什么数据就到那个表中查询。
缺点:多表查询的时候效率低下。

关系:两个表的公共字段叫关系

  • SQL语句

Structured Query Language 结构化查询语言,是用来操作关系型数据库的.常用的关系型数据有:

Access,MySQL,Sql Server,Oracls.

标准的SQL是所有关系型数据库都支持的操作语句,标准的SQL也叫作SQL-92.但是每个数据库在标准的基础上又扩展了自己的东西.所有,一个数据库的拓展语句在在其他数据库不能运行.

  • 连接数据库

需要的参数: Host (-h),username (-u), password (-p),port(默认3306) (-P)

mysql -u root -h localhost -p
  • 退出数据库:exit,quit,q

  • 数据库操作:数据库的本质是一个文件.操作数据库的软件叫做数据库管理系统.

/**
*   创建数据库
*   如果创建的数据库已经存在,会报错.所以一般要进行判   断.
*  同时,如果数据库名是关键字或者纯数字,需要加上反引    号,最好的办法是任何时候都加反引号
*/
Create database db_name [charset=字符编码]
Create database if not exists db_name [charset=字符编码]


/** 
*/
2.  查询数据库
show database;

3.显示数据库的创建语句
show create database create db_name;

4. 更改数据库
alter database db_name [option];

//eg:alter database haha charset=gbk;

5. 删除数据库:如果数据库不存在会报错
drop database if exists db_name;

6. 选择数据库
    use db_name;
  • 数据库表的操作

几个概念:

行row:也叫记录,一行就是一条记录

列(column) : 一列就是一个字段,字段也叫属性,一个表中包含多个字段

1.创建表:(primary key)主键不能重复,不能为空,一个表只能有一个主键,主键可以由多个字段组成.

create table table_name(
    field1 data_type [null | not null][default][auto_increment][primary key],
    field2 data_type,
    ...,
);

2. 查看所有表
show tables;

3.显示创建表的SQL语句
show create table table_name [G];

4.显示表结构
describe [desc] table_name;

5.删除表
drop tabel table_name1,table_name2,...;

数据类型:

int,decimal(总位数,小数位数) 存小数 decimal(10,3), char(1):定长, varchar(10):可变长度, text:大段文字

  • 数据操作
1.插入数据:插入字段可以和数据库中字段顺序不一致,但是值和插入的字段顺序必须一致. 如果插入字段省略掉,插入的值和数据库表的字段的顺序和个数都要一致.

insert into table_name (field1,field2) values (value1,value2);

//自动增长的插入
insert into student values (null,"name","female","shenzhen",22);

//默认值的插入
insert into student values (null,"name","female",default,33);


2.数据的修改
update table_name set field1=value1,field2=value2 [where 条件];

//eg:
update student set gender="male" where name="xiaoming";

update student set gender = "female";

3.删除数据
delete from table_name [whre 条件];

delete from student where name = "haha";

delete from student;    //所有的数据都删除了

4 .查询数据
select 列名 from 表 [where 条件] [order by 排序字段 asc|desc] [limit [起始位置默认0],或者的记录数量];
升序:asc
降序:desc
默认升序

select name,gender from student;
select * from;  //获取所有
select * from student order by score desc;
select * from student limit 3;
select * from student limit 2,10;
select * from student order by score desc limit 3;

//取出第一位
select * from stu order by score desc limit 0,1
  • 运算符

比较运算符: > , >=, <, <=, = , <>(不等于)
逻辑运算符: and, or, not

聚合运算:

Sum(), Avg(), Min(), Count(), Max().

select max(score) from student;
select min(score) from student;
select sum(score) from student;
select avg(score) from student;
select count(*) from student;
select count(*) from student where gender="male";

2.6.数据类型2.6.1.标量数据类型2.6.1.1.不可再分割的数据类型 如整型、浮点型、字符串类型、布尔类型2.6.2.复合数据类型2.6.2.1.由多种数据类型的组成 如数组 对象2.6.3.特殊数据类型2.6.3.1.Null 为null的几种情况:变量未赋值、变量被删除、变量被赋值为null2.6.3.2.Resource 资源型,为第三方数据的引用(如成功的数据库连接、绘制图像创建画布、打开文件、打开文件夹等2.6.4.整形int2.6.4.1.八进制是以0开头的数字 十六进制是0x开头的数字十进制为中间桥梁 转换二进制 binary ---> bin八进制 octal --> oct十进制 decimal --> dec十六进制 hexadecimal ---> hex2.6.4.2.可以使用十进制,十六进制,八进制或 二进制表示 可选的符号。2.6.4.3.注意:八进制数遇到8,9则后面其余数字会被忽略 整数溢出,当数值超出整型的范围会呗判定成float2.6.4.4.类型转换2.6.4.4.1. 或 强制转换 浮点型转换 int会向下取整2.6.5.浮点型2.6.5.1.PHP只实现了双精度,占8个字节2.6.5.2.注意浮点数计算会出现问题0.1 0.2 !=0.32.6.6.字符型string2.6.6.1.数字,字母,下划线,汉字,符号等等,但是必须用引号包起来2.6.6.2.注意 双引号中变量会被解析 而单引号不会2.6.6.3.类型转换. 字符串拼接符 或 strval() 函数来转变成字符串bool—>string //TRUE>> ""1""。 FALSE >> """" ,互转int/float—>string 整数 被转换为数字的字面样式的 stringstring->int/float 含有“.”,""e""E""会被转换成int 其余为float2.6.7.布尔型bool2.6.7.1.true和false不区分大小写2.6.7.2.类型转换 或 强制转换当转换为 boolean 时,以下值被认为是 FALSE :1. 布尔值 FALSE 本身2.整型值 0 浮点型值 0.03. 空字符串,以及字符串 ""0""4. 不包括任何元素的数组5 特殊类型 NULL(包括尚未赋值的变量)6. 从空标记生成的 SimpleXML 对象2.6.8.数组2.6.8.1.PHP的数组用array关键字声明,可以保存任何类型的数据,是一个复合数据类型格式 : array2.6.9.Isset判断变量是否设置2.6.10.Empty()判断变量是否为空。PHP中认为变量的值为:""""、0、""0""、NULL、FALSE、[]时,变量虽然定义了,但是无实际的意义。为空

7,如何在javascript中取得php中的变量?
答:例子如下:

输出运行php的系统名称    echo    PHP_OS

4.PHP与MySQL

  • php开启MySQL拓展,PHP本身是一个框架,它的功能是由PHP拓展而来的,要通过PHP连接数据库,必须开启PHP连接MySQL的功能,就是PHP的MySQL拓展. 在php.ini中,把extension=php_mysql.dll 开启,重启服务器.
1.php连接数据库
$connect = mysql_connect("localhost",'root','password') or die("数据库连接失败");
/**
    通过@符号屏蔽信息
    $connect = @mysql_connect("localhost",'root','password') or die("数据库连接失败");
*/

2. 终止执行:exit(),和die();
die()停止执行,把生成的代码发送到客户端.

3. 选择数据库
方法1: 执行 use db_name
mysql_query("use database_name") or die("数据选择失败");

方法二:
mysql_select_db("database_name") or die ("数据库选择失败");

4. 设置字符编码
mysql_query("set names utf8");

5.查询数据库 : 返回一个资源类型的数据

$results = mysql_query("select * from products");       //resource type

mysql_fetch_row: 取出结果集中数据
开始匹配,指针指向第一个记录.取出资源中的当前记录,匹配成索引数组,指针指向下一条记录.

5.1.
while($rows = mysql_fetch_row($results)){
    echo $rows[0];
    echo "<br>";
    echo $rows[1];
    echo "<br>";
    echo $rows[2];
    echo "<br>";
    echo $rows[3];
    echo "<br>";
}

这种方法读取数据缺点:数据库字段发生变化,会影响数组的索引编码.


5.2: mysql_fetch_assoc : 形成关联数组
数组的键和数据表的字段名相关联
while($rows = mysql_fetch_assoc($results)){
    echo $rows["name"];
    echo "<br>";
    echo $rows["gender"];
    echo "<br>";
    echo $rows["age"];
    echo "<br>";
    echo $rows["id"];
    echo "<br>";    
}

5.3: mysql_fetch_object: 匹配成对象,通过->访问

while($obj=mysql_fetch_object($results)){
    echo $rows->name;
    echo "<br>";
    echo $rows->gender;
    echo "<br>";
    echo $rows->age;
    echo "<br>";
    echo $rows->id;
    echo "<br>";
}


6. 释放资源 mysql_free_result($results);
7. 关闭连接 mysql_close($connect);

页面执行完毕后,所有变量全部销毁,可以不用手动释放资源.

数据的导入与导出,用phpMyAdmin工具

3.运算符3.1.递增/递减 类型转换 运算符 -- ~ @3.2.算术运算符 - / * %3.3.赋值运算符= = -= *= /= .= %= &= |= ^= <<= >>= =>3.4.逻辑运算符3.4.1.And && 与3.4.2.Or || 或3.4.3.Xor 异或3.4.4.! Not 非3.5.比较运算符==,!==,===,!==,<,>,<=,>=3.6.三目运算符条件 ? 表达式 : 表达式23.7.特殊运算符@错误控制符& 地址引用符

复制代码 代码如下:

查看php环境的函数      echo    phpinfo()

4.流程控制4.1.if(){ }else{}if()[}else if(){}执行语句仅有一条时可省略{}第二种写法if():表达式1;表达式2;elseif():表达式1;表达式2;4.2.switch/case4.3.while(){}while():......endwhile;4.4.do{}while()4.5.for ($i=0; i<10; i ){statement}for ($i=0; i<10; i ):statementendfor;4.6.foreach4.6.1.foreach (arr as $value){}每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步4.6.2.foreach (arr as $key => $value)单元的键名和值分别赋给$key和$value供下面代码块使用4.6.3.在$value前加上& 将 值的引用地址赋值给$value 使得$value可以改变数组是值 注意循环结束 最后一个$value 不会销毁需要unset()4.6.4.foreach 不支持用“@”来抑制错误信息的能力。

<?php
$username=$_POST["username"];
?>
<script>
var username="<?php echo $username ?>";
</script>

阻止程序执行die,一般用来做调试

//die;

//@die($a);

5.函数5.1.函数三要数 函数名、参数、返回值5.2.调用、参数传递5.2.1.值传递 直接将值赋值给形参5.2.2.引用传递 使用&将变量的地址传递5.2.3.同一作用域中函数调用可在声明之前5.3.自定义函数5.3.1.function foo($ss=""h""){}foo函数名foo 形参$ss 参数默认值“h” 实参$d5.4.参数的传递5.4.1.全局变量 将函数内部变量保存出来globle $dd 注意全局变量声明时不能跟直接赋值5.4.2.函数内部不能直接使用外部变量5.4.2.1.1、使用全局数组 调用 $GLOBLES[“变量名""]5.4.2.2.2、function ss() use { }5.5.常用系统函数5.5.1.sprintf()格式化输出函数格式 sprintf(""%s 的年龄是 %d"",""jake"",25)//jake的年龄是255.5.2.date(),输出一个格式化的时间time()返回一个时间戳Microtime()返回当前时间的毫秒数和时间戳5.5.2.1.date(""Y-m-d H:i:s"",time//2017-10-16 16:54:545.5.3.max最大值,min() 最小值,rand() 随机值mt_rand() 更随机的函数,round() 四舍五入,ceil() 向上取整,floor() 向下取整,abs()—绝对值,sqrt() 开方,pow() 求某个数的次方5.5.4.unction_exists(), 判断一个函数是否定义了 参数是函数的名字func_get_arg(), 参数实参索引,返回对应参数func_get_args(), 返回函数所有的实参func_num_args() 返回函数实参的个数

8,如何删除一个文件?
答:使用unlink(filename)函数,当然程序必须有权限删除该文件才可以,我们所使用的php虚拟空间可能对一
些文件是有限制的,所以可能会出现权限错误。
9,我定义了一个类User,声明了该类的一个方法getName(),为什么我使用$user=new User;$name=$user.getName()会报错?
答:注意php中对类成员的引用方式,上面的引用应该为$name=$user->getName(),即使用->符号,而不是
Java中使用的“.”号。
10,我申请了一个不带mysql支持的php虚拟空间,请问我该怎么存取应用数据啊?
答:存取数据不一定要使用数据库,使用文件系统也是不错的,另外即使使用数据库,也不一定非要使用像mysql
、oracle等的这样的数据库,也可以使用一些文本数据库,例如txtsql,这样的话就不必去租用费用比较高的mysql
数据库空间了。
11,我申请了一个不带数据库的php空间,我现在的应用数据是存在文件中的,但是这会有一个安全问题,就是
访问者可以通过url查看到这些文件的内容,我怎么保护这些文件内容呢?
答:建议的方式有三种:
1)如果你租用的php空间允许设置目录的http访问权限,那么设置一下即可。
2)可以对文件内容进行加密,那么即使被下载,也没有多大的价值。
3)可以将这些文件的后缀改为.php,即使用php文件存储应用信息,这样的话,访问者就无法通过http访问到
这些文件的真实内容了,当然这些文件中的内容必须是正确的php语法,而且内容要使用php语法中的隐藏语法
将信息隐藏起来,例如一个存放帐号信息的文件如下:
users.php

阻止程序执行exit,一般用来做调试

//exit();

//@exit($a);

6.文件引入6.1.Include ----引入文件,同一个文件可以多次引入include_once ---引入文件,同一个文件只引入一次require ----引入文件,同一个文件可以多次引require_once---引入文件,同一个文件只引入一次6.2.include和require的区别:当引入一个不存在的文件include ---会继续执行后续的代码,require报一个严重性的错代码不再执行

复制代码 代码如下:

php主要输出方式的区别:

7.字符串/数组7.1.字符串7.1.1.分类7.1.1.1.单引号字符串 单引号中变量不会解析7.1.1.2.双引号字符串、变量在双引号中会解析 但必须隔开或用{}包裹,注意双引号中的变量被单引号包裹也会解析7.1.1.3.nowdoc $str=<<<aaa 字符串 aaa; 自定义字符串引号自动转义 变量正常解析7.1.1.4.heredoc 格式$str =<<< 'bbb' 字符串 bbb; 区别 变量不会解析7.1.2.字符串长度strlen 字节长度mb_strlen(str,'utf-8,) 指定编码字符长度字符串下标是按照字节计算7.1.3.字符串函数strtoupper 转化成大写strtolower转化成小写ucfirst 第一个字母大写strpos/strrpos(Astr,Bstr) 返回B在A中 第一/最后次出现的位置str_peplace 字符串替换 将C中的A替换成Btrim() 去除左右空格 ltrim()左 rtrim()右substr 在A字符串中B位置截取到C位置[字节长度]mb_str 在A字符串中B位置截取到C位置[字符长度]strstr 在A字符串中 查找B字符串 并返回B到结尾的字符串strrchr($str ,""B"") 返回最后一次出现B的后面的 字符str_repeat 将字符串重复str_shuffle 打乱顺序7.2.数组7.2.1.创建数组7.2.1.1.显示创建$arr = array(""f"",""s"",5);$arr = array(""name"" => ""saf"",);7.2.1.2.隐式创建$aar[]=""s"" ; 数字下标从零 自增$arr[""name""] = ""fsdf""; 字符下标 顺序按照内存存入顺序7.2.2.遍历 foreach($arr as $key =>$value){}数组指针函数1.key 当前指针位置 下标值current 当前指针位置 元素值;next 移动 指针向下一个prev 指针向上移动一个reset(), 移动指针到 第0位end(),移动指针到 末尾7.2.3.数组函数sort 按照值从低到高排序rsort() 从高到低排序当值为字符串时候 比较码值asort() 保持索引关系排序 值 正向排序arsort 保持索引关系 下标 正向排序ksort()shuffle() 打乱数序count 返回arr 元素的个数array_push() 在数组中添加一个元素array_pop() 移除数组中最后一个元素array_reverse()返回一个被翻转的数组in_array 判断数组中是否有值等于A的元素arrary_keys 返回数组所有的键值7.3.字符串数组转换7.3.1.implode 数组拼接成字符串explode 字符串切割成数组7.3.2.str_split(str , 字符长度) 字符串按照 字符数 切割成数组

<?php
/*
:::user1:password1::user2:password2::user3:password3:::
*/
?>

1、echo

echo() 实际上不是一个函数,是php语句,因此您无需对其使用括号。不过,如果您希望向 echo() 传递一个以上的参数,

那么使用括号会发生解析错误。而且echo是返回void的,并不返回值,所以不能使用它来赋值。

<?php

$a = echo("words"); // 错误!不能用来赋值

echo  "words"; // 55nav

echo  ("words"); // 55nav

echo   ("apple","bear"); //发生错误,有括号不能传递多个参数

echo    "alice","bill","cart", "daring";  // 不用括号的时候可以用逗号隔开多个值, 会输出alicebillcartdaring  不管是否换行,最终显示都是为一行

$fistname="alice";

echo "$fistname com"; // 如果 $firstname = "alice", 则会输出 alice com.

echo '$firstname com'; // 由于使用单引号,所以不会输出$firstname的值,而是输出 $firstname com

?>

8.数据库8.1.介绍8.1.1.MySQl 数据库是甲骨文公司的一个开源的关系型数据库8.1.2.SQL structured query language 结构化查询语言8.2.数据库组成8.2.1.数据库系统8.2.1.1.数据库 数据库管理系统 数据库服务器 数据库管理员8.2.2.数据库服务器8.2.2.1.数据库服务器值的是硬件设备,安装了数据库软件的计算机8.2.3.数据库管理系统8.2.3.1.以新建数据库,修改数据库常见的数据库管理系统有,MySQL oracle SQLserver db2 access8.2.4.数据库8.2.4.1.数据表8.2.4.1.1.字段8.3.登录/退出MySQL系统8.3.1.登录8.3.1.1.mysql -h服务器地址 -P端口号 -u用户名 - p密码-h是服务器地址 本机可省略-P端口号 默认的端口号是3306 可以省略-u 用户名-p密码8.3.1.2.设置密码set password=password8.3.2.退出8.3.2.1.quitexitq8.4.数据库操作8.4.1.库操作8.4.1.1.创建库8.4.1.1.1.语句 create databases 库名 charset 编码 8.4.1.1.2.注意:库名不能重复 创建时可以判断create databases if not exists 库名8.4.1.1.3.命名要求 不能是纯数字或关键字8.4.1.2.显示库8.4.1.2.1.语句 show databases8.4.1.3.删除库 drop databases 库名8.4.1.4.修改库8.4.1.4.1.MySQL不支持修改库名8.4.1.4.2.字符集需改8.4.1.4.2.1.语句alter databases 库名 charset 新字符集alter databases 库名 charset = 新字符集alter databases 库名 default character set 新字符集8.4.1.5.选择库8.4.1.5.1.use 库名8.4.2.表操作8.4.2.1.创建表、8.4.2.1.1.语句 create table 表名 (字段 类型 [属性],字段2 类型 [属性] )8.4.2.2.显示表8.4.2.2.1.语句 show tables8.4.2.2.2.查看创建表单 语句 show create table 表名8.4.2.3.删除表8.4.2.3.1.drop table 表名8.4.2.3.2.删除时候可判断表是否存在drop table if exists 表名8.4.3.数据的操作8.4.3.1.插入数据8.4.3.1.1.语句insert into 表名 字段1,字段2 values insert 表名 set 字段1=值1,字段2=值2insert into 表名 values ,8.4.3.2.查找数据8.4.3.2.1.语句Select 查找的字段(* 代表所有的字段) from 表名[前面必须后面可选][Where 查询条件][Group by 分组][Having 分组过滤条件][Order by asc|desc 排序,正序|逆序] [Limit 限定查询的条数]8.4.3.2.2.所有信息 select * from 表名8.4.3.2.3.某个字段 select 字段,字段2 from 表名8.4.3.2.4.别名 select 字段1 as 新名,字段2 from 表名8.4.3.2.5.模糊查找 select * from 表名 where 字段 like '%包含信息%'8.4.3.2.6.查找并排序 select * from 表名 order by 字段 desc/asc limt 3limt A,B 限定显示行数 A之后的B行8.4.3.2.7.平均值 select avg as 别名 from 表名8.4.3.3.删除8.4.3.3.1.语句 delete from 表名 where 条件如果没有条件将删除所有8.4.3.3.2.truncate 表名 清空表8.4.3.4.修改8.4.3.4.1.语句 update 表名 set 字段1=值1,字段2=值2 where 条件8.4.4.设置字段字符集8.4.4.1.set 字段 字符集8.4.4.2.show charset 显示字符集

12, 如何对一个字符串进行转码?
使用php的iconv函数,签名为:
$str=iconv(fromEncode,toEncode,str);
例如:
$str="php字符串转码";
$str=iconv("utf-8","gbk",$str);//将字符串从utf-8格式转换为gbk格式
转码是很重要的一个问题,例如目前许多博客提供的rss都是utf-8返回的,因此需要通过转化才能正确显示。
13,如何读取一个网页的HTML内容?
PHP中文件的概念和Java中文件流的概念是类似的,许多文件读取的函数,其接受的输入流不仅仅是本地文件系统,也可以是网络文件,下面介绍其中的一种方式:

2.print_r 函数

print_r函数打印关于变量的易于理解的信息。

如果变量是string , integer or float , 将会直接输出其值,如果变量是一个数组,则会输出一个格式化后的数组,便于阅读,也就是有key和value对应的那种格式。对于object对象类同。print_r有两个参数,第一个是变量,第二个可设为true,如果设为true,则会返回字符串,否则返回布尔值TRUE。

<?php

print_r($arr);//直接打印数组$arr

$a="alice";

$c=print_r($a);

echo  $c;//$c的值是TRUE

$c=print_r($a,true);

echo       $c;           //$c的值是字符串alice

?>

9.交互9.1.表单传值9.1.1.get9.1.1.1.传值: 表单: method=’get’接收: $_GET[‘表单元素name的值’];9.1.1.2.get方式通过地址栏传递 通过a标签/js可以模拟9.1.2.post9.1.2.1.表单method=’post’ 即为post传值后台接收: $_POST[‘表单元素name的值’];9.1.3.get/post区别9.1.3.1.get 通过地址栏显示传递 安全性低 传值<kb9.1.3.2.post只能表单传递 安全性高 大小不限制9.2.文件上传9.2.1.上传过程9.2.1.1.1、将上传文件放到服务器零时文件9.2.1.2.2、从临时文件移动到指定位置9.2.2.必要属性9.2.2.1.1、method='post' 传值方式9.2.2.2.2、enctype=""multipart/form-data""9.2.3.服务器接受9.2.3.1.$_FILES 超全局变量 二维数组9.2.3.1.1.$_FILES[""名""](name :文件名,)9.2.3.2.文件判断9.2.3.2.1 判断是否是HTTP POST上传的 返回boolis_uploaded_file() 参数:服务器临时路径$_FILES['名']['tmp_name']9.2.3.2.2 判断是否有错 $_FILES['...']['error'] !=0错误码0 没有错误 上传成功1 上传文件超过php.ini 中upload_max_size2 文件超过HTML表单MAX_FILE_SIZE3 部分文件失败4 没有找到上传文件6 找不到临时文件夹7 文件写入失败9.2.3.2.3 判断文件大小$_FILES['...']['size'] 字节9.2.3.2.4 获取文件扩展名$_FILES['....']['name']截取方法1$str = $_FILES['....']['name']$index = strrpos($str ,""."");$need = substr($str,$index);截取方法2$str = $_FILES['....']['name']strrchr($str ,""."")9.2.3.2.5. 判断文件类型9.2.3.2.5.1.$_FILES['...']['type'] 不可靠9.2.3.2.5.2.第三方$fs=finfo_open(FILEINFO_MIME_TYPE); 打开第三方扩展finfo_file; 获取返回类型9.2.3.2.6 构建临时文件 9.2.3.2.7 构建目标文件 move_uploaded_file(临时文件,目标文件 返回bool)9.3.连接数据库9.3.1.连接数据库函数9.3.1.1.$link = mysqli_connect(主机,用户名,密码,库名);返回一个数据库连接标识9.3.2.执行sql语句9.3.2.1.$result = mysqli_query(连接标识,sql语句)当查询时返回结果集 增删改返回bool9.3.3.抓取结果集数据9.3.3.1.mysqli_fetch_assoc返回row关联数组 每执行一次指针下移一位9.3.3.2.mysql_fetch_array()返回混合数组9.3.3.3.mysql_fetch_row返回索引数组

复制代码 代码如下:

3.var_dump函数

功能: 输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。

var_dump($a);


11.http协议11.1.什么是http协议 yperText Transfer Protocol11.1.1.概念11.1.1.1.http是超文本传输协议,目前应用最广泛的网络协议11.1.2.特点1、简单、快速 通过地址既可传值和访问2、灵活 通过Header(‘content-type:text/html;charset=utf-8’)灵活是设置文件格式3、无连接 客户端和服务器不保持连接状态4、无状态 页面之间相互独立 互不影响11.2.http协议请求11.2.1 请求行 包含信息get|post请求方式 uri信息 协议版本11.2.2 请求头 包含信息user-agent 浏览器信息accept 指定文件格式host;域名connention keep-alive 长连接空白行表示请求头结束11.2.3 请求体 post方式才有请求体 内容即为传值11.3.http响应11.3.1.响应行11.3.1.1.协议版本 状态码 状态文本11.3.1.2.常见状态码200 成功 服务器接受并处理客户端请求301域名永久重定向 服务器端设置302 域名零时重定向 header('location:https:/域名')304读取本地缓存403 没有权限404资源不存在500服务器内部错误11.3.2.响应头11.3.2.1.包含响应时间、服务器信息、脚本信息、内容类型等等11.3.3.空白行11.3.4.响应体 返回客户端的信息11.4.cookie11.4.1.概念 网页缓存 由服务器端制作保存在客户端的文件11.4.2.设置cookiesetcookie(名,值,过期时间,有效路径,有效域名)前三是必须11.4.3.读取cookie$_COOKIE['名']11.4.4.删除cookie 原理即让cookie过期 setcookie;11.5.session11.5.1.工作原理客户第一次打开网页请求 服务器开启session 生成一个id作为文件名 将信息存储 并将文件名作为cookie存在客户端用户第二访问 请求头中携带session_id 服务器通过id来区分用户 返回信息11.5.2.开启session session_start()不管是创建session,还是使用(session,都必须开启一个页面只能开启一次 需要放在页面最顶端11.5.3.设置/获取session设置 $_session['名']='值' ;值没有类型限制session_id() 获取当前session的id获取 $re = $_SESSION['值']11.5.4.删除unset 删除变量session_destroy(); 删除当前session文件11.5.5.用户禁用cookie处理test.php?<?php echo SID?>通过SID常量自传

function getRssContent($url){
$handle = fopen ($url, "rb");
$contents = "";
$count=0;
do {
$data = fread($handle, 1000000);
$count ;
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
fclose ($handle);
return $contents;
}

二、php中的echo语句

14,PHP中如何操作mysql数据库?
为了方便初学者能够上手mysql的操作,我介绍一些常用的操作:
1)数据库连接与关闭

echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来)。 注意echo关键字与字符串之间至少要有一个空格。

<?php echo "hello world!";?>

复制代码 代码如下:

PHP-计算表达式

$dbhost = "";
$dbuser = "";
$dbpw = "";
$dbname = "";
$link = mysql_connect($dbhost, $dbuser, $dbpw) or die("Could not connect: ".mysql_error());
mysql_select_db($dbname);
...//此处是对数据库具体的操作,后面的例子不再写数据库的连接和关闭操作
mysql_close($link);

不同于HTML和CSS,在php中我们可以做计算,比如我们写入echo 12*3计算机会计算出结果36。如下代码:

<?php echo 12*3;?>

2)向表中插入新数据
mysql_query("insert into mytable(id,name) values('".$id."','".$name."')");
上面是向mytable表的id和name字段插入一条数据。
3)从表中查询数据
$rs=mysql_query("select * from mytable mt where mt.id='001'");
4)从表中删除数据
$rs=mysql_query("delete from mytable mt where mt.id='001'");
5)对于复杂查询,例如select子句,mysql3.22以下版本不支持,因此许多时候php编写复杂sql时会得不到结果,这其实不是php的错,而是mysql的版本较低的缘故。
6)对于select返回的结果集,可以如下操作:
对于返回一条结果,可以如下:

PHP-字符串

一个字符串是用双引号括起来的一个词或一个句字,你可以用PHP语言输出把这个字符串输出,像这样:

<?php echo "hello world!";?>

也可以用单引号括起来.

复制代码 代码如下:

可以把两个字符用连接符连接起来,像这样:

<?php echo "Hi,"."imooc!";?>

连接符可以连接多个字符串,上面的例子就是把一个字符串拆分为二个小字符串,然后用一个连接符连起来。在php中字符串连接符是用点(.)来表示的,这一点比较特殊,其它语言中是用加号( )来表示的,比如:JavaScirpt、Asp、C。

$row=mysql_fetch_object($rs);
$id=$row->id;//id是字段名称,或者字段的别名,以下同
$title=$row->title;
$asker=$row->asker;

PHP语句结束符

有的小伙伴们是不是已经注意在每一条PHP代码行结尾处都会有一个分号;。对的,这点注意,在PHP编程中需要在每条语句的末尾加入分号;。但要注意,分号;一定在半角状态下输入噢。

对于返回多条结果,可以如下:

注释

在PHP中也有注释语句:用双斜杠(//)来表示。其它语言中,Html中使用,CSS中使用/*注释语句*/

注释语句可以在PHP程序的任意位置(但注释语句一定要写在之间)。


复制代码 代码如下:

三、变量

while($row=mysql_fetch_object($rs)){
$id=$row->id;
$title=$row->title;
$asker=$row->asker;
}

1.什么是变量

变量是用于存储值的,我们命令服务器去干活的时候,往往需要产生一些数据,需要临时性存放起来,方便取用。我们也可以理解为,变量就像一个购物袋,我们可以用来装苹果、榴莲(当然也可以用来装玫瑰),需要注意的是,一般情况下一个变量只能装一个(不要太贪心)值,除非是复合变量(后面变量类型时会介绍),当我们放进去一个苹果后,再放进榴莲的时候,苹果就被替换掉,再放入香蕉,那么榴莲就被替换了。

当然还有方法可以使得返回的结果为数组,访问也可以根据字段的位置index值访问,这个可以查询相关手册,就不介绍了。
15,如果你的工程中使用HTML在线编辑器,那么FCKEditor可能是比较不错的一个选择,FCKEditor可以自己去网上下载,下载的地方很多,我介绍一下调用方式:
首先将FCKEditor的目录放到网站根目录下,假设你在网站根目录的/modules/cms/目录下的edit.php中要引用FCKEditor,具体代码如下:

2.如何定义变量

定义变量就是向服务器的内存申请空间,用来存储数据。这时候我们就需要用到变量名和变量值.

<?php

$var _name = "苹果";

$n = 10;

?>

解释一下,在“=”左边的是变量名,右边的是变量值。完成定义变量后,需要一个;告诉服务器这行指令已经结束。其中变量名必须通过$符号标识,“=”可不是我们平常所说的等号哦,在PHP中,=是赋值运算符;在这里,var_name是变量名,“苹果”是变量值,它是一个字符串;n是变量名,10是变量值,它是一个整型。

复制代码 代码如下:

3.变量名的命名规则

变量名除了需要“$”进行标识外,还有一些规则需要遵守。变量名的命名规则主要有三条:

①变量名必须以字母或下划线“-”开头,数字不能开头。如”$_name”,”$name” ,”$name2”等

②变量名只能由字母、数字、以及“_”组成,还能包含汉字。如”$_qq”,”$qq308” ,”$my_apple”,“比如"$name我等”,但是”$name*”是不对的。

③变量名不允许包含空格。当变量名由多个单词组成,建议使用下划线“-”进分隔比如 $my_apple),俗称下划线法,或者以大写字母开头比如 $myApple,俗称骆驼式命名法(也称驼峰命名法)。

特别需要注意的是,在PHP中变量名是区分大小写的,如“$my_book”与“$my_Book”代表两个不同的变量。

<?php
$sBasePath = "../../fckeditor/";//fckeditor是FCKEditor的目录
$oFCKeditor = new FCKeditor('content') ;
$oFCKeditor->BasePath= $sBasePath ;
$oFCKeditor->Value="" ;
$oFCKeditor->Width="666px";
$oFCKeditor->Height="300px"
?>
<div>
<?php $oFCKeditor->Create();?>
</div>

4.变量的数据类型

在变量中,由于变量占用的空间单元不一样(占的地盘大小不一样),也分成几种数据类型。

16,如何在session中存储数据?
首先要启动session机制,除了apache本身做一定的设置之外,在使用session的php页面中,要先调用session_start()方法,表示在本页面使用session。在session中存储数据的具体方式如下:

我们可以通过使用“memory_get_usage”获取当前PHP消耗的内存。

可以对比一下内存消耗

<?php

echo $m1 = memory_get_usage(); //初始化消耗内存

echo "<br/>";

$var_string = "123";

echo $m2 = memory_get_usage()-$m1; //字符串消耗内存

echo "<br/>"; 

$n=123;

echo $m3 = memory_get_usage()-$m1-$m2; //整型消耗内存

echo "<br/>"; 

$f=123.00;

echo $m4 = memory_get_usage()-$m1-$m2-$m3;//浮点型消耗内存 

echo "<br/>"; 

$var_array = array("123");

echo $m5 = memory_get_usage()-$m1-$m2-$m3-$m4; //数组消耗内存

?>

复制代码 代码如下:

gettype()返回变量的类型,共有8个可能的值string、integer、float、boolean、array、object、null、unknown

<?php
session_start();
$username="admin";
session_register("username");
?>
[code]
那么在其它的页面,想取得session中的用户名,如下:
[code]
<?php
$username=$_SESSION["username"];
?>

is_type()查看变量是否属于某个类型,如果是,返回TRUE,否则,返回FALSE

$arr = array(1);

echo is_array($arr);

$num = 5;

echo is_int($num);

同理,要判断当前访问的用户是否已经登录也可以通过上面的方式进行:当用户登录之后,在session之中注册用户名,在需要session控制的php页面中加入判断,例如:

is_array -- 检测变量是否是数组

复制代码 代码如下:

is_bool --  检测变量是否是布尔型

if(!session_is_registered("username")){
header("Location:login.php");
}

is_callable --  检测参数是否为合法的可调用结构

上面是通过判断session中是否注册了username变量来实现的。
17,PHP中如何定义类及其成员属性与操作,又如何调用?
直接举一个例子,应该可以说明上面的问题:
定义一个字符串处理工具类:StringUtils

is_double -- is_float() 的别名

复制代码 代码如下:

is_float -- 检测变量是否是浮点型

<?php
class StringUtils{
function StringUtils(){
}
function getLength($str){
return strlen($str);
}
}
?>

is_int -- 检测变量是否是整数

在php页面中调用方式为:

is_integer -- is_int() 的别名

复制代码 代码如下:

is_long -- is_int() 的别名

<?php
include 'classes/com/xxx/StringUtils.php';
$length=StringUtils::getLength("abcde");
//或者
$instance=new StringUtils;
$length=$instance->getLength("abcde");
?>

is_null --  检测变量是否为 NULL

对于一个类的方法,一般有两种调用方式,一种是当作静态方法进行调用,通过::连接符,一种是当作实例方法进行调用,通过->连接符。虽然调用可以使用两种方式调用,但是实际中一个类的方法是否为静态方法,往往是已经逻辑上定义好的,因此每一个方法,往往只使用某种方式调用,例如一个服务类中的方法,基本上应该都是实例方法,而一个工具类中的方法,基本上都是类方法或者说静态方法,例如:

is_numeric --  检测变量是否为数字或数字字符串

复制代码 代码如下:

is_object -- 检测变量是否是一个对象

<?php
class UserService{
var $dbhost = "";
var $dbuser = "";
var $dbpw = "";
var $dbname = "";
function UserService(){
}
function login($username,$password){
$link = mysql_connect($this->dbhost, $this->dbuser, $this->dbpw) or die("Could not connect: ".mysql_error());
mysql_select_db($this->dbname);
$rs=mysql_query("select count(*) as value from cieqas_users where userid='".$username."' and password='".$password."'");
$row=mysql_fetch_object($rs);
$value=$row->value;
mysql_close($link);
settype($value,"integer");
if($value<=0){
return false;
}
return true;
}
?>

is_real -- is_float() 的别名

另外,在实例方法中调用$this,才有实际的意义。
18,如何设置一个变量的类型?
PHP可以算作是弱类型语言的一种,不需要对变量进行强制类型定义,例如:
$username="admin";
$length=0;
$obj=new MyClass;
许多时候,需要将一个字符串变量转换为int变量,或者反过来等等,该如何操作呢?其实可以使用settype方法,该方法可以指定变量的类型,签名如下:
settype(var,type)
其中类型的值有boolean(bool)、integer(int)、float、string、array、object、null
例如:
$state="0";
settype($state,"int");
if($state==0){
...
}
19,如何将一个数组进行反向排列?
通过array_reverse方法实现,例如:

is_resource --  检测变量是否为资源类型

复制代码 代码如下:

is_scalar --  检测变量是否是一个标量

$arr=array();
$arr[0]=1;
$arr[1]=2;
$arr2=array_reverse($arr);

is_string -- 检测变量是否是字符串

20,在PHP中如何将一个时间正确的进行显示?
在php中通过time()方法返回自从 Unix 新纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数,那么如何将该时间正确的显示为本地正确时间,许多时候我们都使用php中的setLocale方法,指定当前的地域,但是我们往往得不到正确的时间,给大家介绍一个其它的解决方式,就是通过Javascript与php结合去解决,例如:

var_dump()获取变量的值和类型的详细信息

$str = ‘hello’;

var_dump($str);

$arr = array(‘A’, ‘B’, ‘C’);

var_dump($arr);

复制代码 代码如下:

在php中,支持8种原始类型,其中包括四种标量类型、两种复合类型和两种特殊类型。php是一门松散类型的语言,不必向php声明变量的数据类型。php会自动把变量转换为自动的数据类型。

<?php

$string="就是就是"; //定义一个字符串“就是就是”

var_dump($string); 

echo "<br/>";

$string="9494";//把它变成整型“9494”

var_dump($string); //通过“var_dump”函数,输出数据类型

 echo "<br/>";

?>

输出结果:string(12) "就是就是"               int(9494)

我们可以发现, 这个变量自动就从原来的字符串转换成了整型咯。

var time="<?php echo time() ?>";
var time=parseInt(time);
var date=new Date(time*1000);
var pattern="yyyy-MM-dd hh:mm:ss";
var df=new SimpleDateFormat();
var str=df.format(date);
document.write(str);

5.PHP标量类型—布尔类型

布尔类型(boolean):只有两个值,一个是TRUE,另一个是FALSE,可以理解为是或否。它不区分大小写。主要用在条件结构中。需要注意的是,当我们用echo指令输出布尔类型时,如果是true则输出的是1,false则什么也不输出。我们可以使用var_dump函数,获取它真正的数据类型。

因此,可以将php中time()的值传递给Javascript,并做为Date对象的参数,然后通过Javascript开源类库JsJava的处理,即可。
21,PHP在当今是非常流行的一门语言,到目前为止已经形成了大量的函数库,例如处理字符串的、数学的、XML的、文件的、SOAP的、网络的等等,不过其在面向对象方面,还有一定程度的欠缺,然而也并不是说非要面向对象才能算是一门如何如何的语言,然而在实际的网站或者项目开发中,仅仅是大量的函数库有些时候感觉不是特殊的方便,尤其是有些时候,业务需要我们抽象出架构层次以及各个对象,这个时候定义一套合适的业务类库就比较合适了,毕竟当我们面对更高业务层面的开发时,我们需要封装的层次更高,那么这个时候类和对象就提上日程了,不过目前使用php的各个函数,感觉也是非常方便的,而且非常强大,这又让我多少有些埋怨类似Java这样的面向对象的语言,做什么逻辑都要借助一大堆类来实现,看来语言之间是需要互相学习的,而不是互相攻击,解决问题促进行业和社会的发展才是最根本的。

6.PHP标量类型—整型

整型(integer):类似于常见的整数。它可以用十进制、八进制、十六进制指定。十进制就是日常使用的数字;八进制,数字前必须加上“0”(阿拉伯数字0);十六进制,数字前必须加“0x”(阿拉伯数字0)。如:

<?php

$data_int = 1234;  // 十进制数

$data_int = -567;    // 一个负数

$data_int = 0123;    // 八进制数(等于十进制的 83)

$data_int = 0x1a;    // 十六进制数(等于十进制的 26)

?>

您可能感兴趣的文章:

  • PHP读书笔记整理_结构语句详解
  • PHP读书笔记_运算符详解
  • 推荐一本PHP程序猿都应该拜读的书
  • 10个对初学者非常有用的PHP技巧
  • 给初学者的30条PHP最佳实践(荒野无灯)
  • 最令PHP初学者们头痛的十四个问题
  • PHP初学者头疼问题总结
  • 最令PHP初学者头痛的十四个问题
  • PHP初学者最感迷茫的问题小结
  • 适合PHP初学者阅读的4本经典书籍

7.PHP标量类型—浮点型

浮点型(浮点数、双精度数或实数),也就是通常说的小数,可以用小数点或者科学计数法表示。科学计数法可以使用小写的e,也可以使用大写的E。

<?php

echo $num_float1 = 1.234;    //小数点,输出结果1.234

echo $num_float2 = 1.2e3;    //科学计数法,小写e,输出结果1200

echo $num_float3 = 7.0E-3;    //科学计数法,大写E,输出结果0.007

?>

8.PHP标量类型—字符串

字符串是由一系列字符组成,在PHP中,字符和字节一样,也就是说,一共有256种不同字符的可能性。

字符串型可以用三种方法定义:单引号形式双引号形式Heredoc结构形式

<?php

$str_string1='我是字符串1';

$str_string2="我是字符串2";

echo $str_string1;

echo "<br/>";

echo $str_string2;

?>

当你的字符串中包含引号的时候,我们怎么办?

<?php

$str_string1 = '甲问:"你在哪里学的PHP?"';       //单引号中嵌入双引号

$str_string2 = "乙毫不犹豫地回答:'当然是慕课网咯!'";      //双引号中嵌入单引号

$str_string3 = '甲问:'能告诉我网址吗?'';            //单引号中嵌入单引号,使用转义符“”

$str_string4 = "乙答道:"www.imooc.com"";        //双引号中嵌入双引号,使用转义符“”

echo $str_string1;

echo $str_string2;

echo $str_string3;

echo $str_string4;

?>

当引号遇到美元咋办?这里的美元可不是真正的美元,而是用美元符号标识的变量。

字符串转义

n        换行

r          回车

t          水平制表符,tab键

\           反斜杠

$          美元符

”           双引号

当双引号中包含变量时,变量会与双引号中的内容连接在一起;双引号可以解析变量,如果想明确的指定名字的结束,可以用花括号{ }把变量名括起来。echo "He drank some {$beer}s";

当单引号中包含变量时,变量会被当做字符串输出。

<?php

$love = "I love you!"; 

$string1 = "慕课网,$love";

$string2 = '慕课网,$love';

echo $string1;                    //输出:慕课网,I  love you!

echo "<br/>";

echo $string2;                    //输出:慕课网,$love

?>

当我的字符串很长怎么办?

我们可以使用Heredoc结构形式的方法来解决该问题,首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串。

<?php

$string1=<<<GOD

我有一只小毛驴,我从来也不骑。

有一天我心血来潮,骑着去赶集。

我手里拿着小皮鞭,我心里正得意。

不知怎么哗啦啦啦啦,我摔了一身泥.

GOD;

echo $string1;

?>

在赋值符号后,输入定界符“<<<”,接着是标识符,你可以用你的女神作为标识符“GOD”,如第2行,也可以使用你喜欢的狗狗,“DOG”作为标识符,但是,结尾处的标识符也必须是一样的。此外,在结尾的一行,如第7行,一定要另起一行,并且此行除了“GOD”,并以“;”号结束之外,不能有任何其他字符,前后都不能有,包括空格,否则会出现错误的哦。切记切记哦。

定界符也可以解析变量,如果想明确的指定名字的结束,可以用花括号{ }把变量名括起来。

9.PHP第一种特殊类型—资源

资源(resource):资源是由专门的函数来建立和使用的,例如打开文件、数据连接、图形画布。我们可以对资源进行操作(创建、使用和释放)。任何资源,在不需要的时候应该被及时释放。如果我们忘记了释放资源,系统自动启用垃圾回收机制,在页面执行完毕之后回收资源,以避免内存被消耗殆尽。

<?php

$file=fopen("f.txt","r");  //打开文件

$con=mysql_connect("localhost","root","root");  //连接数据库

$img=imagecreate(100,100);//图形画布

?>

//偷窥一个小文件,假设服务器上有个文件为“f.txt”,这时候,我们就需要用到资源这种特殊的数据类型。

<?php

//首先采用“fopen”函数打开文件,得到返回值的就是资源类型。

$file_handle = fopen("/data/webroot/resource/php/f.txt","r");

if ($file_handle){   

 //接着采用while循环(后面语言结构语句中的循环结构会详细介绍)一行行地读取文件,然后输出每行的文字    

while (!feof($file_handle)) { //判断是否到最后一行       

 $line = fgets($file_handle); //读取一行文本      

  echo $line; //输出一行文本        

echo "<br/>"; //换行  

  }

}

fclose($file_handle);//关闭文件?>

file handle叫做文件句柄。 在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。

fopen() 函数打开文件或者 URL。

如果打开失败,本函数返回 FALSE。

语法:fopen(filename,mode,include_path,context)

filename必需。规定要打开的文件或 URL。

mode必需。规定要求到该文件/流的访问类型。可能的值见下表。

include_path可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。

context可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

mode 参数的可能的值:

"r"只读方式打开,将文件指针指向文件头。

"r "读写方式打开,将文件指针指向文件头。

"w"写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"w "读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"a"写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"a "读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"x"创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

"x "创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

注释:不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用 n 作为行结束字符,基于 Windows 的系统使用 rn 作为行结束字符,基于 Macintosh 的系统使用 r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。

Windows 下提供了一个文本转换标记("t")可以透明地将 n 转换为 rn。与此对应还可以使用 "b" 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 "b" 或者用 "t" 作为 mode 参数的最后一个字符。

默认的转换模式依赖于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了

n 作为行结束符,但还要期望这些文件可以被其它应用程序例如 Notepad 读取,则在 mode 中使用 "t"。在所有其它情况下使用

"b"。

在操作二进制文件时如果没有指定 "b" 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 rn 字符的奇怪问题。

注释:为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 "b" 标记。

注释:再一次,为移植性考虑,强烈建议你重写那些依赖于 "t" 模式的代码使其使用正确的行结束符并改成 "b" 模式。

feof(fp) 函数检测是否已到达文件末尾 (eof)。

有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。

fgets() 函数从文件指针中读取一行。

语法:fgets(file,length)

file必需。规定要读取的文件。

length可选。规定要读取的字节数。默认是 1024 字节。

file指向的文件中读取一行并返回长度最多为length- 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了length- 1 字节后停止(要看先碰到那一种情况)。如果没有指定length,则默认为 1K,或者说 1024 字节。若失败,则返回 false。

注释:length参数从 PHP 4.2.0 起成为可选项,如果忽略,则行的长度被假定为 1024 字节。从 PHP 4.3 开始,忽略掉length将继续从流中读取数据直到行结束。如果文件中的大多数行都大于 8 KB,则在脚本中指定最大行的长度在利用资源上更为有效。

注释:从 PHP 4.3 开始本函数可以安全用于二进制文件。早期的版本则不行。

注释:如果碰到 PHP 在读取文件时不能识别 Macintosh 文件的行结束符,可以激活 auto_detect_line_endings 运行时配置选项。

fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。与fgets()相同,不同的是 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。

语法:fgetss(file,length,tags)

file必需。规定要读取的文件。

length可选。规定要读取的字节数。默认是 1024 字节。该参数在 PHP 5 之前是必需的。

tags可选。规定不会被删除的标签。

可以用可选的第三个参数tags指定哪些标记不被去掉。若失败,则返回 false。

<?php

$file = fopen("test.htm","r");

echo fgetss($file,1024,"<p>,<b>");

fclose($file);

?>

fclose() 函数关闭一个打开文件。

语法:fclose(file)

file必需。规定要关闭的文件。

file参数是一个文件指针。fclose() 函数关闭该指针指向的文件。如果成功则返回 true,否则返回 false。文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。

10、PHP第二种特殊类型—空类型

NULL(NULL):NULL是空类型,对大小写不敏感,NULL类型只有一个取值,表示一个变量没有值,当被赋值为NULL,或者尚未被赋值,或者被unset(),这三种情况下变量被认为为NULL。

<?php

error_reporting(0);                    //禁止显示PHP警告提示

$var;                                        //为变量未赋值

var_dump($var);                     //NULL

$var1=null;                              //将null赋值给变量$var1

var_dump($var1);                      //NULL

$var2=NULL;                           //将NULL赋值给变量$var2

var_dump( $var2);                    //NULL

$var3 = "节日快乐!";

unset($var3);                             //将变量$var3注销定义

var_dump($var3);                    //NULL

?>

11.超全局变量

php提供了很多预定义的变量,用于提供大量与环境有关的信息。

(1)$_SERVER服务器变量,该全局变量包含着服务器和客户端配置及当前请求环境的有关信息。

print_r  ($_SERVER)

$_SERVER['SERVER_NAME']:当前运行脚本所在的服务器的主机名

$_SERVER['REMOTE_ADDR'] :客户端IP地址

$_SERVER['REQUEST_URI']:URL的路径部分

$_SERVER['HTTP_USER_AGENT'] :操作系统和浏览器的有关信息

(2)$_GET  该变量包含使用GET方法传递的有关信息

(3)$_POST该变量包含使用POST方法传递的参数的有关信息。

(4)$_REQUEST该变量记录着通过各种输入方法传递给脚本的变量,如GET、POST,但不要用这个超级全局变量,因为它不安全而且速度比较慢。

(5)$_COOKIE    cookie变量数组

(6)$_SESSION   会话变量数组

(7)$_FILES  与上传文件有关的变量数组

(8)$_ENV    环境变量数组

(9)$GLOBALS  所有全局变量数组

12.empty()函数

empty()函数是用来测试变量是否已经配置,判断值为否为空。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true值。所以,当字符串的值为0时,也返回true,就是执行empty内部的语句。这就是陷阱。0为空。

如: 假设 $value = 0; 则empty($value)=false

13.isset()函数

isset()函数 一般用来检测变量是否设置.若变量不存在则返回 FALSE。若变量存在且其值为NULL,也返回 FALSE。若变量存在且值不为NULL,则返回 TURE。

简单来说就是,有值返回true,没有值返回false,0不是空,0也是表示有值

使用 unset() 释放变量之后,它将不再是 isset()。

PHP函数isset()只能用于变量,传递任何其它参数都将造成解析错误。


四、常量

什么是常量?常量可以理解为值不变的量(如圆周率)。或者是常量值被定义后,在脚本的其他任何地方都不可以被改变。php中的常量分为自定义常量和系统常量。

自定义常量是根据我们开发的需要,而定义的常量,它通过使用PHP中的函数define()定义。

define()函数的语法格式为:

bool define(string $constant_name, mixed $value[, $case_sensitive = true])

它有3个参数:

第一个参数“constant_name”为必选参数,常量名称,即标志符,常量的命名规则与变量的一致,但是要注意哦,它可不带美元符号哦。第二个参数“value”为必选参数,它是常量的值。第三个参数“case_sensitive”为可选参数,指定是否大小写敏感,设定为true表示不敏感,一般不指定第三个参数的情况下,默认第三个参数的值为false。

(注: string表示参数类型为字符串类型,mixed表示参数类型可以接受为多种不同的类型,case_sensitive = true表示默认为布尔类型TRUE)

(通常常量都全用大写)

//举个栗子,将圆周率定义为常量“PI”

<?php

$p = "PII";

define("PI",3.14);

define($p,3.14);

echo PI;                  //3.14

echo "<br/>";

echo PII;                //3.14

?>

常量的作用

常量主要功效是可以避免重复定义,篡改变量值。在我们进行团队开发时,或者代码量很大的时候,对于一些第一次定义后不改变的量,如果我们使用变量,在不知情的情况下,使用同一变量名时,变量值就会被替换掉,从而会引发服务器执行错误的任务。

此外,使用常量还能提高代码的可维护性。如果由于某些原因,常量的值需要变更时候,我们只需要修改一个地方。例如在做计算中,起初我们取圆周率为3.14,于是很多计算中我们都使用3.14进行计算,当要求计算精度提高,圆周率需要取3.142的时候,我们不得不修改所有使用3.14的代码,倘若代码量比较多时,不仅工作量大,还可能遗漏。

<?php

define("PI",3.14);

$r=3;

echo "面积为:".(PI*$r*$r)."<br/>";

echo "周长为:".(2*PI*$r)."<br/>";

?>

系统常量

系统常量是php已经定义好的常量,我们可以直接拿来使用,常见的系统常量有:

(1)__FILE__ :php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。

(2)__LINE__ :PHP程序文件行数。它可以告诉我们,当前代码在第几行。

(3)PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。

(4)PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。

<?php

echo _FILE_;

echo _LINE_;

echo PHP_VERSION;

echo PHP_OS;

?>

常量如何取值

获取常量值的有两种方法取值。第一种是使用常量名直接获取值;例如计算圆周率的面积,如下(“*”是运算符,相当于乘号,后面部分的小节会介绍):

<?php

define("PI",3.14);

$r=1;

$area =PI*$r*$r;                      //计算圆的面积

?>

第二种是使用constant()函数。它和直接使用常量名输出的效果是一样的,但函数可以动态的输出不同的常量,在使用上要灵活、方便,其语法格式如下:

mixed constant(string constant_name)

第一个参数constant_name为要获取常量的名称,也可为存储常量名的变量。如果成功则返回常量的值,失败则提示错误信息常量没有被定义。(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)

//举个栗子:

<?php

$p="";

//定义圆周率的两种取值

define("PI1",3.14);

define("PI2",3.142);

//定义值的精度

$height = "中";

//根据精度返回常量名,将常量变成了一个可变的常量

if($height == "中"){

$p = "PI1";

}else if($height == "低"){

$p = "PI2";

}

$r=1;

$area= constant($p)*$r*$r;

echo $area;

?>

如何判断常量是否被定义

如果常量被重复定义以后,PHP解析器会发出“Constant XXX already defined”的警告,提醒我们该常量已经被定义过。那么,在团队开发,或代码量很大的情况下,我们如何去判定一个常量是否被定义呢?

defined()函数可以帮助我们判断一个常量是否已经定义,其语法格式为:

bool defined(string constants_name)

它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型)

<?php

define("PI1",3.14);

$p = "PI1";

$is1 = defined($p);

$is2 = defined("PI2");

var_dump($is1);           //bool(true)

var_dump($is2);           //bool(false)

?>

内置常量

PHP_OS       php所在操作系统的名称

PHP_VERSION  当前的php的版本号

魔术常量(下面都是两个下划线额)

__LINE__   文件中的当前行号

echo     __LINE__;

__FILE__    文件的完整路径和文件名

echo    __FILE__;

__FUNCTION__   函数名称

function    test(){

echo     __FUNCTION__;

}

test();

__CLASS__   类的名称

__METHOD__   类的方法名

class      Test{

function    test1(){

echo    __CLASS__;

echo   "<br/>";

echo    __METHOD__;

}

}

$newTest=new    Test();//将类实例化

$newTest->test1();//调用


五、php中常用的运算符

什么是运算符?运算符是告诉PHP做相关运算的标识符号。例如,你需要计算123乘以456等于多少,这时候就需要一个符号,告诉服务器,你需要做乘法运算。

PHP中的运算符有哪些?PHP运算符一般分为算术运算符、赋值运算符、比较运算符、三元运算符、逻辑运算符、字符串连接运算符、错误控制运算符。

算术运算符主要是用于进行算术运算的。

在php中的常用的算术运算符:       -      *        /       %

赋值运算符

PHP的赋值运算符有两种,分别是:

(1)“=”:把右边表达式的值赋给左边的运算数。它将右边表达式值复制一份,交给左边的运算数。换而言之,首先给左边的运算数申请了一块内存,然后把复制的值放到这个内存中。

(2)“&”:引用赋值,意味着两个变量都指向同一个数据。它将使两个变量共享一块内存,如果这个内存存储的数据变了,那么两个变量的值都会发生变化。

<?php

$a = "我在慕课网学习PHP!";

$b = $a;

$c = &$a;

$a = "我不知道我在干嘛!";

echo $b."<br/>";                        //我在慕课网学习PHP!

echo $c."<br/>";                        //我不知道我在干嘛!

?>

比较运算符

比较运算符主要是用于进行比较运算的,例如:等于、全等、不等、大于、小于。

在PHP中常用的比较运算符:>      <       >=      <=     ==    !=      ===     !==     <>(不等)

三元运算符

(“?:”)三元运算符也是一个比较运算符,对于表达式(expr1)?(expr2):(expr3),如果expr1的值为true,则此表达式的值为expr2,否则为expr3。

逻辑运算符

主用是进行逻辑运算的,例如:逻辑与、逻辑或、逻辑异或、逻辑非等,在PHP中常用的逻辑运算符如下表:

And(逻辑与)     $a and $b         如果$a与$b都为TRUE,返回TRUE

Or(逻辑或)         $a or $b        如果$a或$b任一为TRUE,返回TRUE

Xor(逻辑异或)      $a xor $b        如果$a与$b有且仅有一个为TRUE,返回TRUE

Not(逻辑非)         !$a                  如果$a不为TRUE,返回TRUE

And(逻辑与)     $a && $b           如果$a与$b都为TRUE,返回TRUE

Or(逻辑或)      $a || $b              如果$a或$b任一为TRUE,返回TRUE

“与”和“或”有两种不同形式运算符的原因是它们运算的优先级

前三个逻辑运算符的优先级最低。

错误控制运算符

PHP中提供了一个错误控制运算符“@”,对于一些可能会在运行过程中出错的表达式时,我们不希望出错的时候给客户显示错误信息,这样对用户不友好。于是,可以将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉;

如果激活了track_error(这个玩意在php.ini中设置)特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中,此变量在每次出错时都会被覆盖,所以如果想用它的话必须尽早检查。

需要注意的是:错误控制前缀“@”不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

<?php

$conn = @mysql_connect("localhost","username","password");

echo "出错了,错误原因是:".$php_errormsg;

?>


六、语言结构语句

1、顺序结构

顺序结构就像一条直线,按着顺序一直往下执行。我们编写的代码默认都是按照顺序结构执行的。

2.PHP条件结构之if…else…

条件结构就像一个岔路口,可以向左走,也可以向右走。

PHP中的“if…else…”语法,如下:

<?php

if(条件){

//分配服务器干的任务A

}else{

//分配服务器干的任务B

}

?>

3.PHP条件结构之if…else if…

PHP中的“if…else if…”语法,如下:

<?php

if(条件一){

//分配服务器干的任务A

}else if(条件二){

//分配服务器干的任务B

}

?>

通过条件一判断,若返回值为布尔值为TRUE,则执行任务A,若返回值为FALSE,则判断条件二,若返回值为布尔值TRUE,则执行任务B,否则既不执行任务A,也不执行任务B。服务器会继续往下执行其他任务。

4.PHP条件结构之if…else if…else…

PHP中的“if…else if…else…”语法,如下:

<?php

if(条件一){

//分配服务器干的任务A

}else if(条件二){

//分配服务器干的任务B

}else{

//分配服务器干的任务C

}

?>

通过条件一判断,若返回值为布尔值TRUE,则执行任务A,若返回值为FALSE,则判断条件二,若返回值为布尔值TRUE,则执行任务B,否则既不执行任务A,也不执行任务B,执行任务C。

5、PHP条件结构之switch…case…

PHP中的“switch...case...”语法,如下:

<?php

switch (条件)

{

case 条件值一:

//任务一

break;

case 条件值二:

//任务二

break;

default:

//默认任务

}

?>

首先判断条件,若条件的返回值为条件值一,则执行任务一,若条件返回的值为条件值二,则执行任务二,若条件的返回值既不是条件值一也不是条件值二,则执行默认任务。break的作用是结束switch(后面会有专门举例说明),使用switch 语句可以避免冗长的 “if..else if..else”代码块。

break的作用是阻止代码进入下一个case 中继续执行。

6、PHP中循环结构之while循环语句

在PHP中,while循环语句如下:

<?php

while(条件){

//执行任务

}

?>

首先判断某个条件是否符合(条件返回值是否为TRUE),若符合则执行任务,执行完毕任务,再判断条件是否满足要求,符合则重复执行此任务,否则结束任务。

7.PHP中循环结构之do while循环语句

语法如下:

<?php

do{

//执行任务

}while(条件)

?>

首先执行任务(上一节的while语句是先判断条件是否成立,再执行任务),执行任务完毕,判断某个条件是否符合(条件返回值是否为TRUE),若符合则再次执行任务,执行完毕任务,继续判定条件。

while与do…while循环语句的区别是,while先判断条件是否成立,后执行循环,do...while先执行一次任务,再判断是否继续执行循环,也就是说do...while至少会执行一次任务。当条件为FALSE时,while中的任务会一次也不执行,do...while中的任务会执行1次。

8、PHP中循环结构之for循环语句

for循环语句结构如下:

<?php

for(初始化;循环条件;递增项){

//执行任务

}

?>

for 语句中,“初始化”在循环开始前无条件求值一次,“循环条件”在每次循环开始前求值。如果值为 TRUE,则继续循环,执行循环体语句(执行任务)。如果值为 FALSE,则终止循环。“递增项”在每次循环之后被求值(执行)。其常用于循环执行代码块指定的次数。

9、PHP中循环结构之foreach循环语句

在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标、取下标。

(1)只取值,不取下标

<?php

foreach (数组   as    值){

//执行的任务

}

?>

(2)同时取下标和值

<?php

foreach (数组    as    下标 => 值){ 

//执行的任务

}

?>

有一组以学号为下标,姓名为值的数组,这时候需要遍历数组的姓名。

<?php

$students = array('2010'=>'令狐冲','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向问天','2015'=>'任我行','2016'=>'冲虚','2017'=>'方正','2018'=>'岳不群','2019'=>'宁中则',);//10个学生的学号和姓名,用数组存储

//使用循环结构遍历数组,获取学号和姓名  

foreach($students as  $v)

{    

 echo $v;       //输出(打印)姓名

echo "<br/>";

}

?>

列出所有学生学号和姓名!

<?php

$students = array('2010'=>'令狐冲','2011'=>'林平之','2012'=>'曲洋','2013'=>'任盈盈','2014'=>'向问天','2015'=>'任我行','2016'=>'冲虚','2017'=>'方正','2018'=>'岳不群','2019'=>'宁中则',);//10个学生的学号和姓名,用数组存储

//使用循环结构遍历数组,获取学号和姓名

foreach($students as  $key=>$v)

{

echo $key.":".$v;//输出(打印)学号:姓名

echo "<br/>";

}

?>

10.PHP中结构嵌套之条件嵌套

条件结构嵌套就像回家的路上会遇到多个十字路口。

11.PHP中结构嵌套之循环嵌套

循环结构嵌套,就是类似于跑多个足球场,例如假设有两个足球场,一个大足球场,一个小足球场,在大足球场跑一圈后,再到小足球场跑几圈,跑完几圈后,再到大足球场中继续跑。在遍历二维数组中很常用。

12.PHP中结构嵌套之循环结构与条件结构嵌套

有时候在执行任务时,对于一些特殊的任务还需要进行额外处理,这个时候就会将循环结构与条件结构嵌套使用。

本文由星彩网app下载发布于计算机编程,转载请注明出处:php入门小知识小结,PHP初学者布满难题集合

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。