37 整型细节说明

$a;
echo $a;
var_dump($a) //NULL

一个数总是要占用内存空间(字节),在php中一个整数一般占用四个字节(与平台相关),一个字节占用8bit

php的整数的二进制的最高位表示符号 0 表示正数 1 表示负数

通过PHP_INT_SIZE可以显示我们自己的电脑上一个整数用几个字节表示

echo PHP_INT_SIZE;  //4 我的电脑中一个整数是4个字节 32bit
echo PHP_INT_MAX; //整型最大的数为2147483647 最大负数为-2147483647
//2147483647 = 2^31 - 1 二进制表示01111111 11111111 11111111 11111111

如果给定一个数超出了int范围,将会解释为float

38 布尔数细节 浮点数细节 字符串字节

布尔数细节

以下值被当做false:

  • 布尔值false
  • 整型值0
  • 浮点值0.0
  • 空字符串以及字符串“0”
  • 不包括任何元素的数组
  • 不包括任何成员的对象
  • 特殊类型NULL(包括未设定的变量)

浮点数细节

浮点数的字长和平台相关,通常最大值是1.8e308并具有14位十进制数字的精度

浮点数精度是14位(从左边开始第一个非零的数就是精度的第一位)

$a = 0.1234567890222298;
echo $a; //0.12345678902223

字符串细节

$a = "hello" //$a 占用5个字节

""中的变量将被解析,‘’中的变量直接输出其字符本身

39 算术运算符 比较运算符 逻辑运算符

$a=10;$b=7;
if($a++>10 && $b++>7){ //注意后++和前++的运算顺序
echo 'ok' //不输出
}
echo $a; //11
echo $b; //7
$f = false or true;
echo $f; //false or的优先级比=还低

and && 都表示逻辑与 区别在于&&的优先级比and高

or || 都表示逻辑或 区别在于||的优先级比or高

44 布置练习

$_REQUEST()接受的参数要和提交数据的页面给出的html元素名字一致,否则接受的数据是null或""

45 break continue 常量

break/continue语句可以接受一个可选的数字参数来决定跳出几重循环

geto语句常用来跳出循环或switch,可替代多层break

47 函数使用

include与require区别:

  • 当include包含的文件出错时,提出警告,程序继续往下执行
  • 当require包含的文件出错时,致命性错误,终止程序

include_once与require_once 当需包含的文件已经包含时,则不执行

项目中经常使用require_once,放在页面头部

48 函数调用深入理解

含糊调用时会开辟一个新栈,各栈中变量是相互独立的,参数是以值形式传递

函数名不区分大小写

在PHP中错误有3种形式:

  1. Notice:注意
  2. Warning:警告
  3. Error:错误

51 位运算

  1. 二进制的最高位是符号位:0 表示正数,1表示负数
  2. 原码:用二进制来表示的代码

    正数的原码 反码 补码 都一样

    负数的反码:原码符号位不变,其他位取反(0->1 1->0)

    负数的的补码:反码+1
  3. 0的反码补码都是0
  4. php无符号数
  5. 在计算机运算的时候都是以补码来运算的
  • 按位与&: 两个全为1,结果为1
  • 按位或|: 两个中有一个为1,结果为1
  • 按位异或^:两个一个为0,一个为1,结果为1
  • 按位取反~:0=>1 1->0
  • 算术左移<<:符号位不变,低位补0 (左移1位相当于乘以1个2)
  • 算术右移>>: 低位溢出,符号位不变,并用符号位补溢出的高位

55 数组使用细节

unset()可以删除数组中的某个值,该索引不会重新自动建立。也可销毁某个变量,

$a + $b 数组的联合操作

$a  = array( "a"  =>  "apple" ,  "b"  =>  "banana" );
$b = array( "a" => "pear" , "b" => "strawberry" , "c" => "cherry" );
$c = $a + $b ; // Union of $a and $b
echo "Union of \$a and \$b: \n" ;
var_dump ( $c );
//array( "a" => "apple" , "b" => "banana" ,"c" => "cherry")
$c = $b + $a ; // Union of $b and $a
echo "Union of \$b and \$a: \n" ;
var_dump ( $c );
//array( "a" => "pear" , "b" => "strawberry" , "c" => "cherry" )

提交给当前页面时,阻止Notice报错的方法:

  1. 将php.ini文件中的error_reporting改为:error_reporting = E_ALL & ~E_NOTICE
  2. 在当前页面添加error_reporting(E_ALL ^E_NOTICE);
  3. 添加一个隐藏的input<input type="hidden" name="action" value="submitted">

    在php文件中if(isset($_POST['action']) && $_POST['action'] == "submitted"){}

56 排序方法

常用排序方法:

  1. 内部排序法

    1. 交换式排序法

      1. 冒泡排序法

        基本思想:每走一次外层循环就排好一个数,里层循环的循环次数也就少了一个
      2. 快速排序法
    2. 选择式排序法
      1. 选择排序法

        基本思想:第一次外层循环选出数组中最小的数与原数组第一个数交换,第二次循环从剩余的数(不包括第一项)中选出最小的数与原数组第二个数交换……
      2. 堆排序法
    3. 插入式排序法
      1. 插入排序法

        基本思想:把n个待排序的数分为一个有序表(含一个元素)和一个无序表(含n-1个元素),排序过程中依次从无序表中取出一个数与有序表中的元素进行排序并插入适当位置。
      2. 谢尔排序法
      3. 二叉树排序法
  2. 外部排序法

冒泡排序法

function bubbleSort(&$array){  //数组默认传递的是值
$temp = 0;
for($i = 0;$i < count($array) -1;$i++){
for($j = 0;$j < count($array) - 1 -$i;$j++){
if($array[$j] > $array[$j+1]){ //从小到大排列
$temp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $temp;
}
}
}
}

选择排序法 效率比选择排序法稍高,不是每一次都需要交换

function selectSort(&$array){
$temp = 0;
for($i = 0;$i < count($array) - 1;$i++){
$minVal = $array[$i]; //假设$i就是最小值
$minValIndex = $i;
for($j = $i+1;$j < count($array);$j++){
if($minVal > $array[$j]){ //从小到达排列
$minVal = $array[$j]; //找最小值
$minValIndex = $j;
}
}
$temp = $array[$i];
$array[$i] = $array[$minValIndex];
$array[$minValIndex] = $temp;
}
}

插入排序法

function insertSort(&$array){  //从小到大排列
//先默认$array[0],已经有序,是有序表
for($i = 1;$i < count($array);$i++){
$insertVal = $array[$i]; //$insertVal是准备插入的数
$insertIndex = $i - 1; //有序表中准备比较的数的下标
while($insertIndex >= 0 && $insertVal < $array[$insertIndex]){
$array[$insertIndex + 1] = $array[$insertIndex]; //将数组往后挪
$insertIndex--; //将下标往前挪,准备与前一个进行比较
}
if($insertIndex + 1 !== $i){
$array[$insertIndex + 1] = $insertVal;
}
}
}

快速排序法

function quickSort($array){
if(!isset($array[1]))
return $array;
$mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素
$leftArray = array();
$rightArray = array();
foreach($array as $v)
{
if($v > $mid)
$rightArray[] = $v; //把比$mid大的数放到一个数组里
if($v < $mid)
$leftArray[] = $v; //把比$mid小的数放到另一个数组里
}
$leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割
$leftArray[] = $mid; //把分割的元素加到小的数组后面,不能忘了它哦
$rightArray = quickSort($rightArray); //把比较大的数组再一次进行分割
return array_merge($leftArray,$rightArray); //组合两个结果
}

58 顺序查找 二分法查找

顺序查找

function search(&$array,$findVal){
$flag = false;
for($i = 0;$i < count($array);$i++){
if($findVal == $array[$i]){
echo "find it,it's index is $i";
$flag = true;
break; //找到第一个就停止
}
}
if(!$flag){
echo 'can not find it!'
}
}

二分法查找

二分法查找的前提是数组已排序好

首先找到数组的中间数,与要找的数进行比较,如果要找的数大于中间数,则向后找,如果要找的数小于中间数,则向前找,如果相等则已找到。

function binarySearch(&$array,$findVal,$leftIndex,$rightIndex){
if($leftIndex > $rightIndex){
echo "找不到!";
}
$middleIndex = round(($leftIndex + $rightIndex)/2);//找到中间数下标
if($findVal > $array[$middleIndex]){ //如果要找的数大于中间数,则向后找
binarySearch($array,$findVal,$middleIndex + 1,$rightIndex);
}else if($findVal < $array[$middleIndex]){ //如果要找的数小于中间数,则向前找
binarySearch($array,$findVal,$leftIndex,$middleIndex - 1);
}else{ //如果相等则已找到
echo "find it,it's index is $middleIndex";
}
}

64 函数传递即本数据类型和数组的方式

函数在传递基本数据类型(整型 浮点型 字符串 布尔型)是以值传递的,加上&符号之后是以引用传递

在传递数组时,默认也是按值传递

67 构造方法

对象在创建时即使类中没有明确定义构造方法,会使用默认的构造方法,一旦定义构造方法默认的将被覆盖

构造方法的默认修饰符是public

构造方法中的形参个数与对象创建时的实参个数需一致

68 析构方法

析构函数的作用是释放资源的操作,并不是销毁对象本身

销毁的顺序是先创建的对象最后被销毁,按栈(先入后出)顺序

什么时候调用?

  1. 当程序(进程结束)退出的时候
  2. 当一个对象成为垃圾对象(没有任何引用指向它)的时候,析构方法立即调用

69 静态变量

定义静态变量: [访问修饰符] static $变量名

静态变量的访问:

  • 如果在类中访问 self::$变量名
  • 如果在类外访问 类名::$变量名
  • 静态变量属于类的
class Person{
public static $a = 90;
public function __construct(){ //代码未执行
$this -> a = 45;
}
}
echo Person::$a; //90

70 静态方法

静态方法也叫类方法,是属于所有对象的实例

[访问修饰符] static 方法名(){}

常用静态方法操作静态变量,而不能操作非静态变量

在类外部: 类名::类方法名 或者 对象名->类方法名

在类内部: self::类方法名 或者 类名::类方法名

71 面向对象特性

成员属性前必须指定访问修饰符

成员方法前默认访问修饰符为public

protected和public所修饰的成员属性和成员方法在被子类继承时,修饰符不变

子类实例化时默认不会调用父类的构造方法,若需要调用可使用父类名::方法名或者parent::方法名来使用

PHP5默认情况下不直接支持重载,但可通过魔术方法__call()来实现重载效果

在方法的覆盖时,子类的访问权限不能小于父类的访问权限

75 抽象类

抽象类主要用途是让子类来继承,其本身并不需要实例化,这样可以达到代码复用。用abstract来修饰

一个类中只要含有抽象方法,则该类必须声明为抽象方法

抽象类实质是子类的父类,它可以有抽象方法,也可以有可实例化的方法

abstract class Animal{
public $name="abc";
protected $age;
abstract public function cry();
public function getName(){
return $this->name;
}
public static function test(){
echo "可以条调用";
}
}
class Cat extends Animal{
public function cry(){
echo "miaomiao";
}
}
$cat1 = new Cat();
$cat1->cry();
echo $cat1->getName(); //abc
Animal::test(); //可以条调用

76 接口

接口的作用主要是制定规范(定义方法或属性,供类来实现它)。

interface 接口名1{
const A=90; //可以定义常量
public function start();
}
interface 接口名2{
public function stop();
}
class 类名 implements 接口名1,接口名2{ //可实现多个接口
public fucntion start(){
//your code
}
public fucntion stop(){
//your code
}
}
echo 接口名1::A; //90
  • 接口名一般以i开头
  • 接口不能实例化,只能由类来实现
  • 接口里的所有方法都没有方法体,只有当某个类去实现它的时候才把写出方法体
  • 一个类可以实现多个接口,需用逗号隔开
  • 接口中可以有属性,但必须是常量,并且是public
  • 接口中的方法必须是public,默认是public
  • 接口不能继承类,但是接口可以继承多个其他接口
  • 实现接口是对单一继承的补充
    interface iUsb1{
    public function a();
    }
    interface iUsb2{
    public function b();
    }
    interface iUsb extends iUsb1,iUsb2{
    public function c();
    }
    class usb implements iUsb{ //必须全部实现所有接口定义的方法
    public function a(){}
    public function b(){}
    public function c(){}
    }

77 final const

如果我们希望某个类不被其他类继承时,可以使用final修饰符

如果我们希望某个方法不能被子类改写,可以使用final修饰符

final不能修饰成员属性

类中常量const

基本用法 const 常量名=值

访问: 类名::常量名 或 接口名::常量名

常量名应全部大写,并且前面不能有$符,常量在定义是必须赋值,常量是属于类的

81 错误处理

set_error_handle();设置自定义错误处理函数

trigger_error();错误触发器

error_log();向指定的文件发送个错误记录

82 异常处理

当捕获到一个异常后,try块中的后续代码不被继续执行

84 http请求

get/post的区别

  1. 安全性

    get请求的数据会显示在地址栏,post请求的数据放在http协议的请求体
  2. 数据大小

    http协议本身并不限制请求数据大小,浏览器会限制url的长度
  3. get请求携带参数可以更好的添加到收藏夹

禁止浏览器缓存设置

header("Expires:-1");
header("Cache-Control:no-cache");
header("Pragma:no-cache");

87 文件下载

/*
* $file_name 文件名
* $file_sub_dir 下载文件的子路径
*/
function fileDown($file_name,$file_sub_dir){
//对文件名中的中文进行转码
$file_name = iconv("utf-8","gb2312",$file_name);
//文件绝对路径
$file_path = $_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
if(!file_exists($file_path)){
echo "文件不存在!";
return ;
}
//文件指针
$fp = fopen($file_path, "r");
//文件大小
$file_size = filesize($file_path);
//返回的文件类型
header("Content-type: application/octet-stream");
//按照字节返回
header("Accept-Ranges: bytes");
header("Accept-Length: $file_size");
//浏览器弹出对话框 对应文件名
header("Content-Disposition: attachment;filename=".$file_name); $buffer = 1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);
echo $file_data;
} fclose($fp);
}
fileDown("截图.jpg","study/php/exercise/")

101 $_POST

在复选框表单提交时需注意:

<form action="test.php" method="post">
<input type="checkbox" name="hobby[]" value="book"> //复选框的name值需写为数组格式
<input type="checkbox" name="hobby[]" value="write">
</form>

114 cookie

创建cookie

bool setCookie ( string $name  [, string $value [, int $expire  = 0 [,string $path [,string $domain [, bool $secure  = false [, bool $httponly  = false ]]]]]] )

setCookie('name','jesse',time()+3600);

获取cookie

$name = $_COOKIE['name'];

超过有效期则获取不到,cookie自动销毁,不同的键值对可以指定不同的有效时间

删除cookie

要删除某个键值对时,只需把过期时间改成比当前时间还小即可

setCookie('name','jesse',time()-1)

要删除全部cookie 遍历删除

foreach($_COOKIE as $key=>$value){
setCookie($key,"",time()-1);
}

118 session

session可以存储的数据类型有string boolean integer double array object

要使用session都必须初始化

//1.初始化session
session_start();
//2.保存数据
$_SESSION['name']="jesse";
//3.获取所有session数据
print_r($_SESSION);
//通过key获取指定的值
$_SESSION['name'];
//如果我们需要取出对象,则需要实现申明该对象的类的信息w

韩顺平php从入门到精通的更多相关文章

  1. 韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载)

    ed2k://|file|韩顺平.循序渐进学.java.从入门到精通.第0讲-开山篇.avi|37021064|f4fb2fb3db938a642146ccc8f0935fed|h=ao2k3ep7p ...

  2. 干货分享!Oracle 的入门到精通 ~

    Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上 ...

  3. 韩顺平_linux_随堂笔记

    这还是自己3年前(2011年)整理的笔记,记得当时那会儿自己对Linux还特别的憧憬,也很喜欢韩老师的讲课风格,边看边做笔记乐此不彼,现在开通了技术博客,所以把当年的笔记也放上来和大家分享.同时推荐没 ...

  4. 韩顺平老师java视频全套-java视频教程下载

    解压压缩包会有一个种子文件.直接迅雷下载即可,包含了韩顺平老师的java入门视频,jdbc,jsp,servlet,oracle,hibermate,spring,SHH框架,struct,linux ...

  5. 韩顺平Java(持续更新中)

    原创上课笔记,转载请注明出处 第一章 面向对象编程(中级部分) PDF为主 1.1 IDEA 删除当前行,ctrl+y 复制当前行,ctrl+d 补全代码,alt+/ 添加或者取消注释,ctrl+/ ...

  6. <程序员从入门到精通> -- How

    定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...

  7. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...

  8. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  9. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

随机推荐

  1. 记一次TCP重发接口调用的问题

    问题描述:基于微软RDP协议,使用开源rdp库与微软skpye软件进行基于tcp的p2p通讯,由于rdp协议传输原始图片数据较大,调用公司内部ice p2p通讯接口处会导致失败. 错误思路:一开始是怀 ...

  2. netty客户端源码

    随笔记录. //创建一个ChannelFactory(客户端代码) ChannelFactory factory = new NioClientSocketChannelFactory( Execut ...

  3. JAVA多态计算面积main函数调用方法

    public static void main(String[] args) { Shape shape; Scanner input = new Scanner(System.in); System ...

  4. VMware虚拟机克隆Linux(CentOS)系统后找不到eth0网卡的问题(图文详解)

     问题现象: 有时候,会使用VMware虚拟机的的克隆功能,快速的复制已安装好的Linux系统. 可是克隆完之后,会发现没有eth0网卡. 解决办法: 1.编辑/etc/udev/rules.d/70 ...

  5. 谈谈Linux下的数据流重定向和管道命令

    一.标准输入.标准输出.错误输出概述 1.标准输入(stdin)是指令数据的输入,代码为0,使用<或者<<,默认是键盘. 2.标准输出(stdout)是指令执行成功返回的结果,代码为 ...

  6. Shell脚本 | 抓取log文件

    在安卓应用的测试过程中,遇到 Crash 或者 ANR 后,想必大家都会通过 adb logcat 命令来抓取日志定位问题.如果直接使用 logcat 命令的话,默认抓取出的 log 文件包含安卓运行 ...

  7. 高可用Hadoop平台-启航

    1.概述 在上篇博客中,我们搭建了<配置高可用Hadoop平台>,接下来我们就可以驾着Hadoop这艘巨轮在大数据的海洋中遨游了.工欲善其事,必先利其器.是的,没错:我们开发需要有开发工具 ...

  8. 面试题之发散思维能力:如何用非常规方法求1+2+···+n

    今天在<剑指offer>里看到了下面这样一个简单且有趣的题,考察程序员的发散思维能力,前提是你对C++相关知识点熟悉,否则是想不出来方案的,分享给大家.   题目:求1+2+···+n,要 ...

  9. 压测:celey backend为rabbitmq pk redis

    使用celery的backend异步获取结果,本文使用rabbitmq 和 redis分别作为backend,代码对比如下 from celery import Celery, platforms i ...

  10. offsetHeight,scrollHeight,clientHeight,scrollTop以及pageX,clientX,offsetX,screenX,offsetLeft,style.left等的区别以及使用详解

    一.写在前面 在阅读本文前,希望大家能针对每个属性亲手测试,网上现有的大量相关博客都有不等的概念错误,毕竟亲手实践才能更好的掌握这些概念. 1.pageX,clientX,screenX与offset ...