第一题:php
//1.for循环执行几回 //for($i=0;$i=1;$i++){ // echo $i; //}
$i==1条件很成立,死循环
html
for($i=0;$i==1;$i++){ echo $i; }
因为条件$i==1条件不成立,因此for循环不执行
web
第二题:面试
class SomeClass { private $properties = []; public $j; public function __set($name, $value) { $this->properties[$name] = $value; } public function __get($name) { return $this->properties[$name]; } } $obj = new SomeClass(); $obj->name = 'phpgod'; $obj->age = 2; $obj->gender = 'male'; //$obj->j=0; $l = null; var_dump($obj->name); //output:string(6) "phpgod"
var_dump($obj->j); //null
var_dump(isset($obj->j));//因为$j没有赋值,为空null,因此返回false
//var_dump($obj->properties);
var_dump(isset($obj->name));//私有或者保护属性不能被调用
,false
//output:bool(false),你的答案对了吗?为何segmentfault
第三题:foreach和取地址运算符&数组
$arr = [1,2,3,4,5,8]; foreach($arr as &$v) { //nothing todo. echo $v.'<br />'; } //&是取地址运算符,$v = &$a; 这时$v就是$a变量在内在中的存储地址,$v改变$a一样会改变,由于是一个地址 var_dump($arr); //1,2,3,4,5,8 foreach($arr as &$v) { //nothing todo. var_dump($arr); echo $v.'<br />'; } var_export($arr); //1,2,3,4,5,5
&是取地址运算符
,$v = &$a; 这时$v就是$a变量在内在中的存储地址,$v改变$a一样会改变,由于是一个地址函数
PHP foreach原理详解this
PHP面试题,题目很短,也很常见,但更容易出错,题目以下编码
如何实现字符串翻转?
第一反应,固然是strrev
函数啦,这么容易的题目还放在面试里考,真不嫌麻烦啊?可是看了网上的答案后,发现本身错了~~~
strrev函数对英文很好用,直接能够实现字符串翻转,可是面对中文呢?确定都是乱码,对于这样的问题有不少,好比strstr,substr等函数都是这样的。还好PHP提供了mb_类的函数实现不一样编码、不一样语言之间的相互转换等操做。下面是我写的PHP字符串翻转函数(mb_类的函数须要开启一个mb_string实现)。
代码:
<?php header("content-type:text/html;charset=utf-8"); /** strrev() 函数反转字符串。 语法 strrev(string) 参数 描述 string 必需。规定要反转的字符串。 */ /** 此函数的做用是反转中文字符串 mb_strlen() 获取字符的长度 mb_substr() 获取字符的单个元素 krsort() 按照键值逆序排序数组,对关联数组按照键名进行降序排序 Array ( [8] => 国 [7] => 中 [6] => h [5] => s [4] => i [3] => l [2] => g [1] => n [0] => E ) English中国->国中hsilgnE (ksort()对关联数组按照键名进行升序排序) implode() 将数组拼接为字符串 explode() 使用字符串分隔字符串 */ function str_rev_gb($str){ //判断输入的是否是utf8类型的字符,不然退出 if(!is_string($str)||!mb_check_encoding($str,'UTF-8')){ exit("输入类型不是UTF8类型的字符串"); } $array=array(); //将字符串存入数组 $l=mb_strlen($str,'UTF-8');//在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符看成长度1来计算 for($i=0;$i<$l;$i++){ $array[]=mb_substr($str,$i,1,'UTF-8'); } //反转字符串 krsort($array); //拼接字符串 $string=implode($array); return $string; } $str1 = "Englist"; $str2 = "English中国"; $str3 = "Eng中lish国"; $str4 = "中华人民共和国"; echo '直接用PHP自带strrev函数反转:'.'<br />'; echo $str1."->".strrev($str1)."<br>"; echo $str2."->".strrev($str2)."<br>"; echo $str3."->".strrev($str3)."<br>"; echo $str4."->".strrev($str4)."<br>"; echo '<br />'; echo $str1."->".str_rev_gb($str1)."<br>"; echo $str2."->".str_rev_gb($str2)."<br>"; echo $str3."->".str_rev_gb($str3)."<br>"; echo $str4."->".str_rev_gb($str4)."<br>";
运行结果:
直接用PHP自带strrev函数反转: Englist->tsilgnE English中国->��學�hsilgnE Eng中lish国->���hsil���gnE 中华人民共和国->��匒居呰溺䎍學� Englist->tsilgnE English中国->国中hsilgnE Eng中lish国->国hsil中gnE 中华人民共和国->国和共民人华中
须要注意的是,mb_strlen并非PHP核心函数
,使用前须要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在而且没有被注释掉,不然会出现未定义函 数的问题。
参考文档:PHP 实现字符串翻转(包含中文汉字)
参考:
// 处理汉字
function strReverseMb($str) { $revStr = ''; if (is_string($str) && mb_check_encoding($str, "UTF-8")) { $len = mb_strlen($str); for ($i = $len-1; $i>=0; $i--) { $revStr .= mb_substr($str, $i, 1, "UTF-8"); } } return $revStr; }
php官方文档strrev函数最下面给出了支持utf-8的方案:
function utf8_strrev($str){ preg_match_all('/./us', $str, $ar); return join('',array_reverse($ar[0])); }
bool empty ( mixed var)
若是 var 是非空或非零的值,则 empty() 返回 FALSE。
换句话说,""、0、"0"、NULL、FALSE、array()
、var $var; 以及没有任何属性的对象都将被认为是空的
,若是 var 为空,则返回 TRUE
isset -- 检测变量是否设置
描述
bool isset ( mixed var [, mixed var [, ...]])
若是 var 存在则返回 TRUE,不然返回 FALSE。
若是已经使用 unset() 释放了一个变量以后,它将再也不是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE
。同时要注意的是一个 NULL 字节("0")并不等同于 PHP 的 NULL 常数。
注意:若是变量不存在(或者unset()释放一个变量后)
,isset()和empty()都不会报错;is_null(),is_numeric(),if会报错
is_numeric 检测变量是否为数字或数字字符串;
is_null正好是isset的反结果,咱们能够把它当作是!isset,是isset的一个逆操做。
警告: isset() 只能用于变量,由于传递任何其它参数都将形成解析错误。若想检测常量是否已设置,可以使用 defined()函数。
用法:注意defined(""
),若是没有双引号,则会警告:undefined constant website
if(defined("website")){ echo "true"; }else{ echo "false"; }
if('' == null && '' == 0 && null == 0 && 0 =='0') echo 'if'; if('' == '0' || null == '0' ) echo 'if2';
结论:'' ,null , 0 ,'0'互相相等;'',null不等于'0'
个人博客即将同步至腾讯云+社区,邀请你们一同入驻:https://cloud.tencent.com/dev...