学习笔记 2016-04-12

<?php  $x=dir(".");  while($y=$x->read())  {  echo $y; }  $x->close(); ?> 

显示当前文件夹下的所有文件名

 


能创建多级目录的PHP函数

<?php
      function createdir($path,$mode){
              if (is_dir($path)){  
                      echo "目录'" . $path . "'已经存在";
              }else{ 
                          $re=mkdir($path,$mode,true); //第三个参数为true即可以创建多极目录
                         if ($re){
                                 echo "目录创建成功";
                         }else{
                                 echo "目录创建失败";
                         }
                 }
         }
     $path="c:/test/test"; //要创建的目录
     $mode=0755; //创建目录的模式
     createdir($path,$mode);//测试
 ?>

 



<?php
$arr = "a";
$arr[0]="b";
echo $arr;
echo $arr[0]; ?>

 

输出 b b

原因是:

 

$a = 'abcdef'; 请取出$a的值并打印出第一个字母

echo $a{0} 或 echo substr($a,0,1)

 

//另外

直接改变数组的值自 PHP 5 起可以通过引用传递来做到。之前的版本需要需要采取变通的方法:

Example #10 在循环中改变单元

<?php
// PHP 5
foreach ($colors as &$color) {
    $color = strtoupper($color);
}
unset($color); /* ensure that following writes to
$color will not modify the last array element */

// Workaround for older versions
foreach ($colors as $key => $color) {
    $colors[$key] = strtoupper($color);
}

print_r($colors);
?>

以上例程会输出:

Array
(
    [0] => RED
    [1] => BLUE
    [2] => GREEN
    [3] => YELLOW
)

注意 使用引用 foreach后 一定要把最后一个 unset 掉



[单选题]php程序中,当异常被触发时,通常会发生
  1.  这些说法都对
  2.  根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本
  3.  当前代码状态被保存
  4.  代码执行被切换到预定义的异常处理器函数



请举例说明在你的开发过程中用什么方法来加快页面的加载速度
要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具




$a = '100abc';$b = '300abc';$c = $a + $b;echo $c;

输出 400

类型转换的判别 ¶

PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个 string 值赋给变量 $var$var 就成了一个 string。如果又把一个integer 赋给 $var,那它就成了一个integer

PHP 的自动类型转换的一个例子是加法运算符“+”。如果任何一个操作数是float,则所有的操作数都被当成float,结果也是float。否则操作数会被解释为integer,结果也是integer。注意这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式本身的类型。

<?php
$foo = "0";  // $foo 是字符串 (ASCII 48)
$foo += 2;   // $foo 现在是一个整数 (2)
$foo = $foo + 1.3;  // $foo 现在是一个浮点数 (3.3)
$foo = 5 + "10 Little Piggies"; // $foo 是整数 (15)
$foo = 5 + "10 Small Pigs";     // $foo 是整数 (15)
?>

如果上面两个例子看上去古怪的话,参见字符串转换为数值

如果要强制将一个变量当作某种类型来求值,参见类型强制转换一节。如果要改变一个变量的类型,参见 settype()

如果想要测试本节中任何例子的话,可以用 var_dump() 函数。

Note:

自动转换为 数组 的行为目前没有定义。

此外,由于 PHP 支持使用和数组下标同样的语法访问字符串下标,以下例子在所有 PHP 版本中都有效:

<?php
$a    = 'car'; // $a is a string
$a[0] = 'b';   // $a is still a string
echo $a;       // bar
?>

请参阅存取和修改字符串中的字符一节以获取更多信息。

类型强制转换 ¶

PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。

<?php
$foo = 10;   // $foo is an integer
$bar = (boolean) $foo;   // $bar is a boolean
?>

允许的强制转换有:

  • (int), (integer) - 转换为整形 integer
  • (bool), (boolean) - 转换为布尔类型 boolean
  • (float), (double), (real) - 转换为浮点型 float
  • (string) - 转换为字符串 string
  • (array) - 转换为数组 array
  • (object) - 转换为对象 object
  • (unset) - 转换为 NULL (PHP 5)

(binary) 转换和 b 前缀转换支持为 PHP 5.2.1 新增。

注意在括号内允许有空格和制表符,所以下面两个例子功能相同:

<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>

将字符串文字和变量转换为二进制字符串:

<?php
$binary = (binary)$string;
$binary = b"binary string";
?>

Note:

可以将变量放置在双引号中的方式来代替将变量转换成字符串:

<?php
$foo = 10;            // $foo 是一个整数
$str = "$foo";        // $str 是一个字符串
$fst = (string) $foo; // $fst 也是一个字符串

// 输出 "they are the same"
if ($fst === $str) {
    echo "they are the same";
}
?>

有时在类型之间强制转换时确切地会发生什么可能不是很明显。更多信息见如下小节:


add a note add a note

字符串转换为数值 ¶

当一个字符串被当作一个数值来取值,其结果和类型如下:

如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成integer 来取值。其它所有情况下都被作为 float 来取值。

该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。

<?php
$foo = 1 + "10.5";                // $foo is float (11.5)
$foo = 1 + "-1.3e3";              // $foo is float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)
$foo = 1 + "bob3";                // $foo is integer (1)
$foo = 1 + "10 Small Pigs";       // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1;          // $foo is float (11)
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)     
?>

更多信息可以参考 Unix 手册中的 strtod(3)。

本节中的示例可以通过复制/粘贴到下面的代码中来显示:

<?php
echo "\$foo==$foo; type is " . gettype ($foo) . "<br />\n";
?>

不要想像在 C 语言中的那样,通过将一个字符转换成整数以得到其代码。使用函数 ord() 和 chr() 实现 ASCII 码和字符间的转换。






哪个函数可以返回FTP服务器上文件的大小?
  •  
     ftp_size()
 


is_a

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE


说明 ¶

<?php
// define a class
class WidgetFactory
{
  var $oink = 'moo';
}

// create a new object
$WF = new WidgetFactory();

if (is_a($WF, 'WidgetFactory')) {
  echo "yes, \$WF is still a WidgetFactory\n";
}
?>


<?php for($i=6;$i<10;$i++) echo $i; echo ",";?>
  1.  6,7,8,9,
  2.  6789, 选择B  如果for循环不加{} 则只认识一句  认为在循环中


sort 数组排序

可以给定第二个参数按照不同的要求排序
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
    echo "fruits[" . $key . "] = " . $val . "\n";
}

?>

以上例程会输出:

fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange

成功时返回 TRUE, 或者在失败时返回 FALSE





有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)
<?php
function BubbleSort(&$arr)
{
$cnt=count($arr);
$flag=1;
for($i=0;$i<$cnt;$i++)
{
if($flag==0)
{
return;
}
$flag=0;
for($j=0;$j<$cnt-$i-1;$j++)
{
if($arr[$j]>$arr[$j+1])
{
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
$flag=1;
}
}
}
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
?>

  


 

关于PHP数组的说法,不对的是:
选项:处理PHP数组,foreach的效率要比for高很多,是因为foreach走的是链表的遍历。 选项:PHP数组底层采用的是循环链表(X 是双向链表),正向、反向遍历数组都很方便。
选项:无论是 array(1, 2, 3) 还是array(1 => 2, 2=> 4)等,本质上都是hash_table。
选项:PHP数组插入和删除操作的时间复杂度都是O(1)。

简述UCenter的单点登录机制
    ??????????????????????
所谓单点登录,无非就是几个站点共用一个用户中心,实现同步登陆,同步退出。 其实最终还是用户去登录,只是采用了ajax (javascript利用src异步跨域调用)用户不会发现。 而且利用了p3p头实现了,不同域名,单点登录(ucenter用的cookie) 缺点就是采用ajax 客服端请求 ,如果有10个以上应用,登录速度就慢下来了
PHP filters中FILTER_SANITIZE_EMAIL的作用是删除所有字符,除了字母、数字以及 !#$%&'*+-/=?^_`{|}~@.[]
 

str_replace

(PHP 4, PHP 5, PHP 7)

str_replace — 子字符串替换

说明 ¶

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。

如果没有一些特殊的替换需求(比如正则表达式),你应该使用该函数替换 ereg_replace() 和 preg_replace()

参数 ¶

如果 search 和 replace 为数组,那么 str_replace() 将对 subject 做二者的映射替换。如果 replace 的值的个数少于 search 的个数,多余的替换将使用空字符串来进行。如果 search 是一个数组而 replace 是一个字符串,那么 search 中每个元素的替换将始终使用这个字符串。该转换不会改变大小写。

如果 search 和 replace 都是数组,它们的值将会被依次处理。

search

查找的目标值,也就是 needle。一个数组可以指定多个目标。

replace

search 的替换值。一个数组可以被用来指定多重替换。

subject

执行替换的数组或者字符串。也就是 haystack

如果 subject 是一个数组,替换操作将遍历整个 subject,返回值也将是一个数组。

count

如果被指定,它的值将被设置为替换发生的次数。

返回值 ¶

该函数返回替换后的数组或者字符串。

范例 ¶

Example #1 str_replace() 基本范例

<?php
// 赋值: <body text='black'>
$bodytag str_replace("%body%""black""<body text='%body%'>");

// 赋值: Hll Wrld f PHP
$vowels = array("a""e""i""o""u""A""E""I""O""U");
$onlyconsonants str_replace($vowels"""Hello World of PHP");

// 赋值: You should eat pizza, beer, and ice cream every day
$phrase  "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits""vegetables""fiber");
$yummy   = array("pizza""beer""ice cream");

$newphrase str_replace($healthy$yummy$phrase);

// 赋值: 2
$str str_replace("ll""""good golly miss molly!"$count);
echo 
$count;
?>

Example #2 可能的 str_replace() 替换范例

<?php
// 替换顺序
$str     "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order   = array("\r\n""\n""\r");
$replace '<br />';

// 首先替换 \r\n 字符,因此它们不会被两次转换
$newstr str_replace($order$replace$str);

// 输出 F ,因为 A 被 B 替换,B 又被 C 替换,以此类推...
// 由于从左到右依次替换,最终 E 被 F 替换
$search  = array('A''B''C''D''E');
$replace = array('B''C''D''E''F');
$subject 'A';
echo 
str_replace($search$replace$subject);

// 输出: apearpearle pear
// 由于上面提到的原因
$letters = array('a''p');
$fruit   = array('apple''pear');
$text    'a p';
$output  str_replace($letters$fruit$text);
echo 
$output;
?>

注释 ¶

Note此函数可安全用于二进制对象。

Caution

了解替换顺序

由于 str_replace() 的替换时从左到右依次进行的,进行多重替换的时候可能会替换掉之前插入的值。参见该文档的范例。

Note:

该函数区分大小写。使用 str_ireplace() 可以进行不区分大小写的替换。

参见 ¶

array_intersect_key

(PHP 5 >= 5.1.0, PHP 7)

array_intersect_key — 使用键名比较计算数组的交集

说明 ¶

array array_intersect_key ( array $array1 , array $array2 [, array $ ... ] )

array_intersect_key() 返回一个数组,该数组包含了所有出现在 array1 中并同时出现在所有其它参数数组中的键名的值。

参数 ¶

array1

The array with master keys to check.

array2

An array to compare keys against.

array

A variable list of arrays to compare.

返回值 ¶

Returns an associative array containing all the entries of array1 which have keys that are present in all arguments.

范例 ¶

Example #1 array_intersect_key() 例子

<?php
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_intersect_key($array1, $array2));
?>

以上例程会输出:

array(2) {
  ["blue"]=>
  int(1)
  ["green"]=>
  int(3)
}

上例中可以看到只有 'blue' 和 'green' 两个键名出现在两个数组中,因此被返回。此外注意 'blue' 和 'green' 的值在两个数组中是不同的。但因为只检查键名,因此还是匹配。返回的值只是 array1 中的。

在 key => value 对中的两个键名仅在 (string) $key1 === (string) $key2 时被认为相等。换句话说,执行的是严格类型检查,因此字符串的表达必须完全一样。



三者都是 用来在脚本中插入其他档案,视乎 url_allow_fopen 是否核准,这个档案可以从系统内部或外部取得。但他们之间也有微细的分别:</br>include(): 这个函式容许你在脚本中把同一个档案插入多次,若果档案不存在,它会发出系统警告并继续执行脚本。</br>include_once():它跟 include() 的功能相似,正如它的名字所示,在脚本的执行期间,有关档案只会被插入一次。</br>require():跟 include() 差不多,它也是用来在脚本中插入其他档案,但若果档案不存在,它会发出系统警告,这个警告会引致致命错误令脚本中止执行
echo new stdClass == new stdClass, '-', new stdClass !== new stdClass    输出 1-1
stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。stdClass是PHP的一个基类,所有的类几乎都继承 这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。凡时用new stdClass()的变量,都不可能会出现$a->test()这种方式的使用。PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型 的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。
PHP可以用 $object = new StdClass(); 创建一个没有成员方法和属性的空对象。
很多时候,程序员们会将一些参数配置项之类的信息放在数组中使用,但是数组操作起来并不是很方便,很多时候使用对象操作符->xxx比数组操作符['xxx']要方便不少。于是就需要创建一个空的对象,来将需要的属性名和属性值存储到对象中。
然而PHP中没有Javascript里面 var object = {}; 这样的语法。
PHP创建空对象至少可以使用3种方法实现
方法一:写一个空类
勉强能完成任务,但是特别没有格局。
  1. <?php
  2.         class cfg {                
  3.         }        
  4.         $cfg = new cfg;
  5.         $cfg->dbhost = 'www.51-n.com';
  6.         echo $cfg->dbhost;
  7. ?>
复制代码
方法二:实例化 StdClass 类
StdClass类是PHP中的一个基类,然而比较诡异的是PHP手册里面血几乎没有提到过这个类,至少在PHP索引中是搜索不到这个类的。
StdClass类没有任何成员方法,也没有任何成员属性,实例化以后就是一个空对象。
  1. <?php
  2.         $cfg = new StdClass();
  3.         $cfg->dbhost = 'www.51-n.com';
  4.         echo $cfg->dbhost;
  5. ?>
复制代码
方法三:折腾json_encode()和json_decode()
这种方法就是把一个空的JSON对象通过json_decode()转变为PHP的StdClass空对象。
同样的道理,你可以将一个数组通过json_encode()转成JSON,再通过json_decode()将JSON转为StdClass对象,
关于这两个函数,可以参考PHP手册。
  1. <?php
  2.         $cfg = json_decode('{}');
  3.         $cfg->dbhost = 'www.51-n.com';
  4.         echo $cfg->dbhost;
  5. ?>
复制代码


用PHP打印出前一天的时间格式是2006-5-10 22:21:21   echo date('Y-m-d 选项:i:s', strtotime('-1 days'));
下面哪个正则表达式,可以从服务器上取到访问域名第二层?preg_replace("/.*?([^\.\/]+)(\.(com|net|org|gov|edu))?\.[^\.\/]+$/","\\1", $_SERVER['HTTP_HOST']);
set_time_limit() 用来控制php脚本的最大执行时间,它的默认值是(秒) 30秒
 
posted @ 2016-04-12 10:12  的士特啰嗦司机  阅读(250)  评论(0编辑  收藏  举报