摘要:存儲的文件是以來進行命名的,文件的內容就是值的序列話之后的內容,。是鍵值,是的結果。使外部調用時只要知道這個方法的存在多態父類的方法繼承的到子類以后可以有不同的實現方式繼承書教材計算機類教材這就是現實世界的繼承關系。
1.函數并立即調用
call_user_func(function(){ echo "hello,world"; });
2.上下文變量
$context="hello,world"; call_user_func(function()use($context){ echo $context; });
3.use和$this
class A { public $t; public function __construct($t="hello,world"){ $this->t=$t; } function test(){ call_user_func(function(){ echo $this->t;//php5.4+ }); } } $a=new A(); $a->test(); class Hello { private $message = "Hello world "; public function createClosure() { return function() { echo $this->message; }; } } class Bye { private $message = "Bye world "; } $hello = new Hello(); $helloPrinter = $hello->createClosure(); $helloPrinter(); // outputs "Hello world" $bye = new Bye(); $byePrinter = $helloPrinter->bindTo($bye, $bye);//like javascript apply $byePrinter(); // outputs "Bye world" $CI = $this; $callback = function () use (&$CI) { $CI->public_method(); };
4.調用一切可調用的東西
class Contrller{ //調用具體的action, public function __act($action){ call_user_func( array($this,$action) ); //$this->{$action}() } } class HelloContrller extends Controller{ public function index(){ } public function hello(){ } public function dance(){ } }
5.裝飾器
//裝飾器 $dec=function($func) { $wrap=function ()use ($func) { echo "before calling you do sth "; $func(); echo "after calling you can do sth too "; }; return $wrap; }; //執行某功能的函數 $hello=function (){ echo "hello "; }; //裝飾 $hello=$dec($hello); //在其他地方調用經過裝飾的原函數 $hello(); /*output: before calling you do sth hello after calling you can do sth too */
6.object
$obj = new stdClass; $obj->a = 1; $obj->b = 2;
7.static
class father { public function __construct() { // $this->init(); static::init(); } private function init() { echo "father "; } } class son extends father { /*public function __construct() { $this->init(); }*/ public function init() { echo "son "; } } $son = new son(); son::init();//son
8.list explode
list( , $mid) = explode(";", "aa;bb;cc"); echo $mid; //輸出 bb
9.object array
$array = json_decode(json_encode($deeply_nested_object), true); //$array = (array) $yourObject; function object_to_array($data){ if (is_array($data) || is_object($data)) { $result = array(); foreach ($data as $key => $value) { $result[$key] = object_to_array($value); } return $result; } return $data; }
10.tree
function displayTree($array){ $newline = "
"; $output = ""; foreach($array as $key => $value) { if (is_array($value) || is_object($value)) { $value = "Array()" . $newline . "(
11.交換變量
list($a, $b) = array($b, $a);
12.PHP中SESSION反序列化機制
修改php系列化的引擎, ini_set("session.serialize_handler", "需要設置的引擎");ini_set("session.serialize_handler", "php_serialize");默認是以文件的方式存儲。
存儲的文件是以sess_sessionid來進行命名的,文件的內容就是session值的序列話之后的內容,name|s:6:"spoock";。name是鍵值,s:6:"spoock";是serialize("spoock")的結果。
13.php-fpm
vi /etc/php-fpm.d/www.conf
TPC socket
listen = 127.0.0.1:9000
Unix Domain Socket (Apache 2.4.9+)
listen = /var/run/php-fpm/php-fpm.sock
沒有sock文件的話先設置listen = /var/run/php-fpm/php-fpm.sock,然后重啟下php-fpm就有了
14.php和js數組區別
JS:數組屬于引用類型值,存儲在堆中https://www.zhihu.com/questio...
var a = {"Client":"jQuery","Server":"PHP"};
var b = a;
a["New"] = "Element";
console.log(b);
// 輸出 Object { Client="jQuery", Server="PHP", New="Element"}
PHP例程1:
$a = array("Client"=>"jQuery","Server"=>"PHP");
$b = $a;
$a["New"] = "Element";
var_export($b);
//輸出 array("Client"=>"jQuery","Server"=>"PHP")
PHP例程2:
$a = array("Client"=>"jQuery","Server"=>"PHP");
$b = &$a; //引用賦值
$a["New"] = "Element";
var_export($b);
//輸出 array("Client"=>"jQuery","Server"=>"PHP","New"=>"Element")
PHP對象默認是引用賦值,而不是值復制:
class foo {
public $bar = "php";
}
$foo = new foo();
$tmp = $foo;//$tmp = clone $foo;值復制
$tmp->bar = "sql";
echo $foo->bar."n"; //輸出sql
15.編碼
“中”這個漢字在UTF-8的16進制編碼是0xe4,0xb8,0xad
因此在雙引號字符串中,會被轉義為 “中” x開頭表示這是一個以十六進制表達的字符,就和HTML中&xe4; 一樣 PHP中的字符串就是直接本地編碼二進制存儲的
單引號字符串中,直接輸出xe4xb8xad
$str1 = "xe4xb8xad";中
$str2 = "xe4xb8xad";xe4xb8xad
$str3 = "中";
16.數據庫連接
new mysqli時通過p:127.0.0.1來表示使用持久連接,里面的p就是persistent持久的意思
function db() {
static $db; //靜態變量 if ($db) { return $db; } else { $db = new mysqli("p:127.0.0.1","user","pass","dbname",3306); return $db; }
}
function foo1() {
return db()->query("SELECT * FROM table1")->fetch_all();
}
function foo2() {
return db()->query("SELECT * FROM table2")->fetch_all();
}
var_export( foo1() );
var_export( foo2() );
function db() {
static $db; //靜態變量 if ($db) { return $db; } else { $db = uniqid(mt_rand(), true); return $db; }
}
function foo1() { return db(); }
function foo2() { return db(); }
echo foo1()."n";
echo foo2()."n";
17 面向對象
繼承:可以使子類復用父類公開的變量、方法;
封裝:屏蔽一系列的細節。使外部調用時只要知道這個方法的存在;
多態:父類的方法繼承的到子類以后可以有不同的實現方式;
繼承:書 & 教材 & 計算機類教材 —— 這就是現實世界的繼承關系。
封裝:手機 —— 它是封裝好的,當你使用它時,不必知道里面的電路邏輯。
多態:人.看(美女) & 人.看(強光) —— 參數類型不一樣,執行的也不一樣。
https://segmentfault.com/a/11...
18.數字前自動補0
$a = 1;
echo sprintf("%02d", $a);//輸出該數字,若十位、個位為空或0,自動補零
$a = "01";
echo sprintf("%d", $a);//去0
function addZ(a){
return ("0" + a).slice(-2);
}
19.html5 使用 Content-Security-Policy 安全策略
與ios 交互使用jsbridge庫需要添加信任的frame-src
; style-src "self" http://.xxx.com "unsafe-inline"; script-src "self" "unsafe-inline" "unsafe-eval" http://.xxx.com;">
20.php數組轉js數組
var mapRegion =
21.浮點數精度 四舍六入五成雙
銀行家舍入 的方法,即:
舍去位的數值小于5時,直接舍去;
舍去位的數值大于等于6時,進位后舍去;
當舍去位的數值等于5時,分兩種情況:5后面還有其他數字(非0),則進位后舍去;若5后面是0(即5是最后一位),則根據5前一位數的奇偶性來判斷是否需要進位,奇數進位,偶數舍去。
49.6101 -> 50
49.499 -> 49
49.50921 -> 50
48.50921 -> 48
48.5101 -> 49
function tail($num, $fen) {
$avg = bcdiv($num, $fen, 2); //除 $tail = bcsub($num, $avg*($fen-1), 2); //減 echo $num."=".str_repeat($avg."+", $fen-1).$tail." "; echo "$num=$avg*($fen-1)+$tail "; return array($avg, $tail);
}
var_export(tail(100, 3));
var_export(tail(100, 6));
//輸出:
100=33.33+33.33+33.34
100=33.33*(3-1)+33.34
array (
0 => "33.33",
1 => "33.34",
)
100=16.66+16.66+16.66+16.66+16.66+16.70
100=16.66*(6-1)+16.70
array (
0 => "16.66",
1 => "16.70",
)
來自
知乎
http://stackoverflow.com/ques...
http://stackoverflow.com/ques...
https://www.quora.com/What-ar...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/20974.html
摘要:而哈士奇區別于普通狗,又有新的特征逗比,愛搗亂為了保證類之間的松綁定,通常會繼承抽象類,而且是淺繼承只有一層子類。如果知道所有類都會共享一個公共的行為實現,就使用抽象類,并在其中實現該行為。 為什么使用OOP OOP是一個模塊化的過程,目的是為了把復雜問題簡單化,一個模塊解決一個復雜問題的某一個方面,即一個類應當只有一個職責 OOP區別于順序式編程與過程式編程,在于: 1.順序編程...
摘要:要達到想要的效果正確的做法是即用來產生一個立即作用域,保證回調函數執行的時候最近的原型作用域的就是當時循環的。判斷數組中是否存在滿足條件的項,只要有一項滿足條件,就會返回。 之前常常因為不注意,習慣用寫PHP或者Java的方式來寫nodejs,產生了了一些錯誤,這里總結一些小小的trick,以便于展示nodejs的不同,和平時需要注意的地方。 變量提升 var variable = g...
摘要:什么是元類剛才說了,元類就是創建類的類。類上面的屬性,相信愿意了解元類細節的盆友,都肯定見過這個東西,而且為之好奇。使用了這個魔法方法就意味著就會用指定的元類來創建類了。深刻理解中的元類 (一) python中的類 今天看到一篇好文,然后結合自己的情況總結一波。這里討論的python類,都基于python2.7x以及繼承于object的新式類進行討論。 首先在python中,所有東西都...
摘要:在代碼中可以看到一些常見的,在這里做一個簡單的小結。的妙用在某些場景下我們需要判斷我們是否是從一個循環中跳出來的,并且只針對跳出的情況做相應的處理。這時候我們通常的做法是使用一個變量來標識是否是從循環中跳出的。 在 python 代碼中可以看到一些常見的 trick,在這里做一個簡單的小結。 json 字符串格式化 在開發 web 應用的時候經常會用到 json 字符串,但是一段比...
摘要:本章內容主要是對列表的進一步操作,以及初識元組數據結構。列表非常適合用于存儲在程序運行期間可能變化的數據集,列表可以被修改。代碼結果相比于列表,元組是更簡單的數據結構。 《Python編程:從入門到實踐》筆記。本章內容主要是對列表的進一步操作,以及初識元組數據結構。 1. 遍歷列表 本章主要是for循環: # 代碼: magicians = [alice, david, carolin...
閱讀 2910·2021-09-22 15:54
閱讀 1899·2019-08-30 15:53
閱讀 2254·2019-08-29 16:33
閱讀 1430·2019-08-29 12:29
閱讀 1403·2019-08-26 11:41
閱讀 2381·2019-08-26 11:34
閱讀 2969·2019-08-23 16:12
閱讀 1432·2019-08-23 15:56