Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: PHP

PHP array_keys() 會自動轉換資料型態

Posted on 2018 年 7 月 30 日2021 年 3 月 12 日 By 日落 在〈PHP array_keys() 會自動轉換資料型態〉中尚無留言

給定一個 array:

$list = [
    '200' => 'OK',
    '404' => 'not found',
    '500' => 'internal server error',
];

使用 array_keys() 取得 keys 以後,key 的資料型態若可以被轉為 int 則會被自動轉換:

$keys = array_keys($list);

// array(3) {
//   [0]=>
//   int(200)
//   [1]=>
//   int(404)
//   [2]=>
//   int(500)
// }

由文件中可以看到,透過第三個參數「$strict」可以要求保留原始資料型態,但無法避開第二個參數「$search_value」。所以第三個參數基本上是放好看的 (WTF)

如果要處理的資料是比較敏感的,建議在 key 前面加個 prefix,或是取得 keys 以後再手動轉換資料型態。

Tags:PHP, 資訊學習

PHP 的 Memcache 與 Memcached 函式庫無法共用資料

Posted on 2018 年 6 月 14 日2021 年 3 月 12 日 By 日落 在〈PHP 的 Memcache 與 Memcached 函式庫無法共用資料〉中尚無留言

剛接觸的應該會被命名搞的一頭誤水,畢竟名字相同、不然就是幾乎相同 XD

負責提供記憶體讀寫快取的服務叫做 Memcached,這個服務和 PHP 八竿子打不著關係,就算你不是寫 PHP 也這樣可以使用他。

再來要說的是 PHP 底下的二個函式庫:Memcache 和 Memcached。這二個函式庫,主要是提供一個方法讓 PHP 連接前面提到的 Memcached 讀寫資料。另外要注意的是 Memcache 和 Memcached 函式庫雖然名字很接近,但卻是二個完全不同的函式庫,無法同時使用,只能二選一。

以下透過 psysh 實際操作,來看一下同時使用會發什麼事情。

使用 Memcache 寫入一筆資料:

>>> $m = new Memcache
=> Memcache {#201}
>>> $m->connect('localhost')
=> true
>>> $m->set('test', ['Hello', 'World'])
=> true
>>> $m->get('test')
=> [
     "Hello",
     "World",
   ]

再來使用 Memcahed 函式庫,連到 localhost 的 Memcached server 看看會發生什麼事:

>>> $d = new Memcached
=> Memcached {#198}
>>> $d->addServer('localhost', 11211)
=> true
>>> $d->getAllKeys()
=> [
     "test",
   ]
>>> $d->get('test')
=> 0

可以看出這二個函式庫提供的 methods 看起來很接近,但是底層處理資料的方式不一樣,只能挑其中一個來使用。

Tags:PHP, 資訊學習

由網頁觸發、執行 PHPUnit

Posted on 2018 年 5 月 31 日2021 年 3 月 12 日 By 日落 在〈由網頁觸發、執行 PHPUnit〉中尚無留言

通常都是在 console 底下執行 PHPUnit 跑測試:

$ phpunit Test.php 
... Run by vendor/bin/phpunit ...
PHPUnit 7.1.5 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 30 ms, Memory: 4.00MB

OK (1 test, 1 assertion)

但若開發環境無法使用 console 的話,只能靠寫 PHP script 來 require PHPUnit library 來執行。在這邊發現其實 PHPUnit 有保留 interface 讓使用者可以不透過 console 來操作 PHPUnit,可以在 PHP script 裡面 require library 來使用。

先使用 composer 把 library 拉下來:

composer require 'phpunit/phpunit'

在 PHPUnut/TextUI 底下,有實作幾個 controller 來模擬 console 的操作。以下使用 Command 來執行 PHPUnit:

<?php

require __DIR__ . '/vendor/autoload.php';

use PHPUnitTextUICommand;

$cmd = new Command();

$cmd->run([
    'phpunit',  // 1st arg
    'Test.php', // 2nd arg
]);

如果執行上面這段 PHP script,會得到與在 console 執行 PHPUnit 一樣的結果。
不過要注意的是測試結果會直接輸出到 std out,若另外處理的話,記得用 output buffer 把資料拉回來,直接在瀏覽器看的話會破版。

備註:PHPUnit 不同版本的路徑不同,類別名稱也會不同。

Tags:PHP, PHPUnit

PHP 7.1 的 Symmetric Array Destructuring

Posted on 2018 年 5 月 24 日2021 年 3 月 12 日 By 日落 在〈PHP 7.1 的 Symmetric Array Destructuring〉中尚無留言

PHP 7.1 對 list() 語法做了一些調整,讓 list() 操作使用起來更簡便。

原本的 list() 語法:

list($a, $b) = [1, 2];
// $a = 1, $b = 2

在 7.1 以後可以使用陣列來表示:

[$a, $b] = [1, 2];

這個語法稱為 Symmetric Array Destructuring。

有了這個 feature 以後,不用另外宣告暫存變數也可以對調變數 (swap):

[$b, $a] = [$a, $b];
Tags:PHP, 程式設計

PHP array 新增 element 的方法和效率

Posted on 2018 年 5 月 7 日2021 年 3 月 12 日 By 日落 在〈PHP array 新增 element 的方法和效率〉中尚無留言

新增 element 到 PHP array 的寫法有二種,一種是用 array_push(),一種是使用 $list[] 直接新增。

跑個迴圈塞一千萬筆資料進 array,看看哪一種寫法的速度比較快。

這個是 array_push() 的:

$list = [];

$start = microtime(true);

for ($a = 0; $a < 10000000; $a++ ) {
    array_push($list, 1);
}

$end = microtime(true);

var_dump($end - $start);  // double(7.2292509078979)

同上,若將語法換掉的話:

$list = [];

$start = microtime(true);

for ($a = 0; $a < 10000000; $a++ ) {
    $list[] = 1;
}

$end = microtime(true);

var_dump($end - $start);  // double(2.0703480243683)

小量資料的話,其實二種作法在速度上不會差很多,但資料量變大時,速度差異就會變得很明顯。

Tags:PHP

文章分頁

上一頁 1 ... 11 12 13 ... 26 下一頁

其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.