一、判断代码输出

    $str1 = null;
$str2 = false;
echo $str1==$str2 ? '相等' : '不相等';
$str3 = '';
$str4 = 0;
echo $str3==$str4 ? '相等' : '不相等';
$str5 = 0;
$str6 = '0';
echo $str5===$str6 ? '相等' : '不相等'; 

输出:
相等
相等
不相等

$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = '';
$a5 = '0';
$a6 = 'null';
$a7 = array();
$a8 = array(array());
echo empty($a1) ? 'true' : 'false';
echo empty($a2) ? 'true' : 'false';
echo empty($a3) ? 'true' : 'false';
echo empty($a4) ? 'true' : 'false';
echo empty($a5) ? 'true' : 'false';
echo empty($a6) ? 'true' : 'false';
echo empty($a7) ? 'true' : 'false';
echo empty($a8) ? 'true' : 'false';

  输出: true  true   true true true  false true false

 $test = 'aaaaaa';
$abc = & $test;
unset($test);
echo $abc;

  输出: 'aaaaa'

 $count = 5;
function get_count(){
static $count = 0;
return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();

  输出 5  0 1

php 对bool 转换 字符串的处理

  $a=false;
echo $a; // ''
echo $a.'';// ''
echo (string)$a; // ''
echo json_encode($a); // false $b=true;
echo $b; // 1
echo $b.'';// 1
echo (string)$b; // 1
echo json_encode($b); // true if(''){
echo "is ok";
}else{
echo "no ok";
}
// false 输出 no ok if('false'){
echo "is ok";
}else{
echo "no ok";
}
// true 输出 no ok

  php 对象引用赋值

<?php
$a="Hello"; // $a 分配内存地址 0x00001,并赋值 Hello 。
$b=&$a; // $b 分配内存地址 0x00002,并将该地址指向 0x00001 。
$b="word"; // 为 0x00001 地址赋值 word
echo $a,$b; // 输出 word ,word /*******/ $a="Hello"; // $a 分配内存地址 0x00001,并赋值 Hello 。
$b=&$a; // $b 分配内存地址 0x00002,并将该地址指向 0x00001 。
unset($b); // 解除 $b 分配的内存地址 0x00002 与 0x00001 的 绑定关系
$b="word"; // 为 0x00002 地址赋值 word
echo $a,$b; // 输出 Hello word
?>

二、算法

1、冒泡排序

$arr=[1,6,3,8,9,12,6];
$len=count($arr); for($i=0;$i<$len;$i++)
{
for($j=$i+1;$j<$len;$j++)
{ if($arr[$i]>$arr[$j])
{
$tmp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$tmp; } }
} var_dump($arr);

  2、二分查找

二分查找需要查找的集合对象为有序队列。

function  binarySearch(Array $arr,$key)
{
$len=count($arr);
if($len==0)
return false;
$begin=0;
$end=$len-1; //如果查找的值为集合首元素则$begin,$end将=
while ( $begin <= $end) { $mid=floor(($begin+$end)/2);
if($arr[$mid]==$key){
return $arr[$mid];
}
if($arr[$mid]<$key){
$begin=$mid +1;
}
if($arr[$mid]>$key){
$end=$mid-1;
}
}
return false;
}
$arr=[3,4,6,7,8,10,11,55,67];
$result=binarySearch($arr,4);
var_dump($result);

  3、 分割字符串

$str= 'abcdefg';
// 读取字符串中指定位置字符
echo $str[2];// c
// explode 第一个参数为空则 Warning: explode(): Empty delimiter // 将字符串转换成字符数组
$arr=[];
for ($i=0; $i <strlen($str) ; $i++) {
$arr[$i]=$str[$i];
}
foreach ($arr as $key=>$value) {
echo $key.':'.$value.'
';
}

4、快速排序法:

有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。

参考:

http://developer.51cto.com/art/201403/430986.htm

function   quickSort(&$arr,$begin,$end)
{ if($begin>=$end)
return; $k=$arr[$begin];
$x=$begin;
$y=$end; while ($x<$y)
{
while ($x<$y && $arr[$y]>=$k)
{
$y--;
} while ($x<$y && $arr[$x]<=$k) {
$x++;
} if ( $x<$y ){
$temp=$arr[$x];
$arr[$x]=$arr[$y];
$arr[$y]=$temp; // $arr[$x];
}
} $arr[$begin]=$arr[$x];
$arr[$x]=$k; quickSort($arr,$begin,$x-1);
quickSort($arr,$x+1,$end); } $arr= Array(3,7,5,4,6,8,2,9,13); quickSort($arr,0,sizeof($arr)-1);
print_r($arr);
/*
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
[5] => 7
[6] => 8
[7] => 9
[8] => 13
) */

四、开发常见问题

1、XSS 跟 CSRF 攻击

XSS:跨站脚本(Cross-site scripting)
通过在提交表单中注入脚本,导致站点受影响。
解决方案:
如果只需要纯文本内容,则在内容展示的时候对内容进行HTML编码,解决注入脚本问题。
如果提交的内容本身就是HTML结构,此时安全的做法是 根据提交的内容重新生成HTML树,然后建立HTML接口白名单,过滤掉非法HTML元素,重新生成HTML内容。

CSRF:跨站请求伪造(Cross-site request forgery)
获取用户的cookie信息,模拟用户进行业务数据操作。
理论上是无法杜绝的,只能根据场景去判断。比如操作金额的时候需要用户再次输入支付密码等相关信息。

php 基础知识的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  10. APP测试入门篇之APP基础知识(001)

    前言        最近两月比较多的事情混杂在一起,静不下心来写点东西,月初想发表一遍接口测试的总结,或者APP测试相关的内容,一晃就月底了,总结提炼一时半会也整不完.放几个早年总结内部培训PPT出来 ...

随机推荐

  1. Linux:目录&文件基本操作

    - 表示上一次所在目录,- 通常表示当前用户的"home"目录.使用 pwd 命令可以获取当前所在路径(绝对路径). 新建文件:touch test创建目录:mkdir -p fa ...

  2. 为什么不能把委托(delegate)放在一个接口(interface)当中?

    stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...

  3. 浅谈压缩感知(二十七):压缩感知重构算法之稀疏度自适应匹配追踪(SAMP)

    主要内容: SAMP的算法流程 SAMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.SAMP的算法流程 前面所述大部分OMP及其前改算法都需要已知信号的稀疏度 ...

  4. atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型运行期获得Dialect

    atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型运行期获得Dialect   #-----原理 Hibernate 运行期获得Dialect   2010-07-28 12:59 ...

  5. iOS开发-- 开发环境,证书和授权文件

    一.成员介绍 1.    Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1)    Developer Certification(开发证书)安装在电脑 ...

  6. Maven学习总结(一)——Maven入门——转载

    一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1. ...

  7. Python类

    在类的变量前面加 _ _ 是私有变量,外部不可访问. 需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是 ...

  8. 利用BitLocker和vhdx创建一个有加密的Win10系统

    如果电脑不支持TPM加密BitLocker,就无法对系统盘进行全盘加密. 可以采用一个变通的方法:创建一个vhdx,将这个虚拟磁盘进行BitLocker加密,然后在这个盘里安装操作系统,最后把vhdx ...

  9. A new start

    学习前端已经有一年多,也自己写过不少博客.笔记,但是比较不开心的是有时候自己写的博客自己都看不懂,所以最后决定重新开一个博客,目标是写能让别人看懂也能让自己看懂的东西,那才算真成功真的懂了.最后希望的 ...

  10. 通过Ruby On Rails 框架来更好的理解MVC框架

    通过Ruby On Rails 框架来更好的理解MVC框架   1.背景    因为我在学习软件工程课程的时候,对于 MVC 框架理解不太深入,只是在理论层面上掌握,但是不知道如何在开发中使用 MVC ...