938 lines
59 KiB
HTML
938 lines
59 KiB
HTML
<!DOCTYPE HTML>
|
||
<html lang="en" class="coal" dir="ltr">
|
||
<head>
|
||
<!-- Book generated using mdBook -->
|
||
<meta charset="UTF-8">
|
||
<title>PHP cheatsheet - Andrew's Blog</title>
|
||
|
||
|
||
<!-- Custom HTML head -->
|
||
|
||
<meta name="description" content="Andrew Ryan's Blog">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<meta name="theme-color" content="#ffffff">
|
||
|
||
<link rel="icon" href="../../favicon.svg">
|
||
<link rel="shortcut icon" href="../../favicon.png">
|
||
<link rel="stylesheet" href="../../css/variables.css">
|
||
<link rel="stylesheet" href="../../css/general.css">
|
||
<link rel="stylesheet" href="../../css/chrome.css">
|
||
|
||
<!-- Fonts -->
|
||
<link rel="stylesheet" href="../../FontAwesome/css/font-awesome.css">
|
||
<link rel="stylesheet" href="../../fonts/fonts.css">
|
||
|
||
<!-- Highlight.js Stylesheets -->
|
||
<link rel="stylesheet" href="../../highlight.css">
|
||
<link rel="stylesheet" href="../../tomorrow-night.css">
|
||
<link rel="stylesheet" href="../../ayu-highlight.css">
|
||
|
||
<!-- Custom theme stylesheets -->
|
||
<link rel="stylesheet" href="../../src/style/custom.css">
|
||
|
||
<!-- MathJax -->
|
||
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||
</head>
|
||
<body class="sidebar-visible no-js">
|
||
<div id="body-container">
|
||
<!-- Provide site root to javascript -->
|
||
<script>
|
||
var path_to_root = "../../";
|
||
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "coal" : "coal";
|
||
</script>
|
||
|
||
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
||
<script>
|
||
try {
|
||
var theme = localStorage.getItem('mdbook-theme');
|
||
var sidebar = localStorage.getItem('mdbook-sidebar');
|
||
|
||
if (theme.startsWith('"') && theme.endsWith('"')) {
|
||
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
|
||
}
|
||
|
||
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
|
||
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
|
||
}
|
||
} catch (e) { }
|
||
</script>
|
||
|
||
<!-- Set the theme before any content is loaded, prevents flash -->
|
||
<script>
|
||
var theme;
|
||
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
||
if (theme === null || theme === undefined) { theme = default_theme; }
|
||
var html = document.querySelector('html');
|
||
html.classList.remove('coal')
|
||
html.classList.add(theme);
|
||
var body = document.querySelector('body');
|
||
body.classList.remove('no-js')
|
||
body.classList.add('js');
|
||
</script>
|
||
|
||
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
|
||
|
||
<!-- Hide / unhide sidebar before it is displayed -->
|
||
<script>
|
||
var body = document.querySelector('body');
|
||
var sidebar = null;
|
||
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
|
||
if (document.body.clientWidth >= 1080) {
|
||
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
|
||
sidebar = sidebar || 'visible';
|
||
} else {
|
||
sidebar = 'hidden';
|
||
}
|
||
sidebar_toggle.checked = sidebar === 'visible';
|
||
body.classList.remove('sidebar-visible');
|
||
body.classList.add("sidebar-" + sidebar);
|
||
</script>
|
||
|
||
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
||
<div class="sidebar-scrollbox">
|
||
<ol class="chapter"><li class="chapter-item affix "><a href="../../index.html">Andrew's Blog</a></li><li class="chapter-item "><a href="../../posts/linux/linux.html"><strong aria-hidden="true">1.</strong> linux</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/linux/install_linux.html"><strong aria-hidden="true">1.1.</strong> install linux</a></li><li class="chapter-item "><a href="../../posts/linux/bash_profile.html"><strong aria-hidden="true">1.2.</strong> bash profile</a></li><li class="chapter-item "><a href="../../posts/linux/command_list.html"><strong aria-hidden="true">1.3.</strong> command list</a></li><li class="chapter-item "><a href="../../posts/linux/git_guide.html"><strong aria-hidden="true">1.4.</strong> git guide</a></li><li class="chapter-item "><a href="../../posts/linux/tar.html"><strong aria-hidden="true">1.5.</strong> tar</a></li><li class="chapter-item "><a href="../../posts/linux/run_x86_elf_in_x64_setup.html"><strong aria-hidden="true">1.6.</strong> run x86 elf in x64 setup</a></li></ol></li><li class="chapter-item "><a href="../../posts/mac/mac.html"><strong aria-hidden="true">2.</strong> mac</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/mac/macos_profiles.html"><strong aria-hidden="true">2.1.</strong> macos profiles</a></li></ol></li><li class="chapter-item "><a href="../../posts/swift/swift.html"><strong aria-hidden="true">3.</strong> swift</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/swift/learn_swift.html"><strong aria-hidden="true">3.1.</strong> learn swift basics</a></li><li class="chapter-item "><a href="../../posts/swift/swift_extensions.html"><strong aria-hidden="true">3.2.</strong> Swift extensions</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_extension.html"><strong aria-hidden="true">3.3.</strong> SwiftUI extensions</a></li><li class="chapter-item "><a href="../../posts/swift/install_swift.html"><strong aria-hidden="true">3.4.</strong> install swift</a></li><li class="chapter-item "><a href="../../posts/swift/task_planner.html"><strong aria-hidden="true">3.5.</strong> implment task panner app with SwiftUI</a></li><li class="chapter-item "><a href="../../posts/swift/swift_cheat_sheet.html"><strong aria-hidden="true">3.6.</strong> Swift Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/swift/yinci_url.html"><strong aria-hidden="true">3.7.</strong> Personal privacy protocol</a></li><li class="chapter-item "><a href="../../posts/swift/swift_regular_exressions.html"><strong aria-hidden="true">3.8.</strong> Swift regular exressions</a></li><li class="chapter-item "><a href="../../posts/ios/how_to_create_beautiful_ios_charts_in_swift.html"><strong aria-hidden="true">3.9.</strong> How to Create Beautiful iOS Charts in鑱絊wift</a></li><li class="chapter-item "><a href="../../posts/swift/swiftui_source_code.html"><strong aria-hidden="true">3.10.</strong> SwiftUI source code</a></li><li class="chapter-item "><a href="../../posts/swift/use_swift_fetch_iciba_api.html"><strong aria-hidden="true">3.11.</strong> use swift fetch iciba API</a></li></ol></li><li class="chapter-item "><a href="../../posts/ios/ios.html"><strong aria-hidden="true">4.</strong> ios</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ios/cocaposd_setup_and_install_for_ios_project.html"><strong aria-hidden="true">4.1.</strong> cocaposd setup and install for ios project</a></li><li class="chapter-item "><a href="../../posts/ios/swiftui_show_gif_image.html"><strong aria-hidden="true">4.2.</strong> SwiftUI show gif image</a></li><li class="chapter-item "><a href="../../posts/ios/implement_task_planner_app.html"><strong aria-hidden="true">4.3.</strong> implement Task planner App</a></li></ol></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c.html"><strong aria-hidden="true">5.</strong> objective_c</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/objective_c/objective_c_cheat_sheet.html"><strong aria-hidden="true">5.1.</strong> Objective-C Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/objective_c/objective_c_for_absolute_beginners_read_note.html"><strong aria-hidden="true">5.2.</strong> Objective-C Note</a></li></ol></li><li class="chapter-item "><a href="../../posts/dart/dart.html"><strong aria-hidden="true">6.</strong> dart</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/dart/flutter.html"><strong aria-hidden="true">6.1.</strong> Flutter Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/dart/dart_cheat_sheet.html"><strong aria-hidden="true">6.2.</strong> Dart Cheat Sheet</a></li><li class="chapter-item "><a href="../../posts/flutter/flutter_dev_test.html"><strong aria-hidden="true">6.3.</strong> Flutter dev test</a></li></ol></li><li class="chapter-item "><a href="../../posts/rust/rust.html"><strong aria-hidden="true">7.</strong> rust</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/rust/offline_use_rust.html"><strong aria-hidden="true">7.1.</strong> Offline use rust</a></li><li class="chapter-item "><a href="../../posts/rust/rust_grammer.html"><strong aria-hidden="true">7.2.</strong> rust grammar</a></li><li class="chapter-item "><a href="../../posts/rust/pase_string_and_decimal_conversion.html"><strong aria-hidden="true">7.3.</strong> pase string and decimal conversion</a></li><li class="chapter-item "><a href="../../posts/rust/parse_types.html"><strong aria-hidden="true">7.4.</strong> rust types</a></li><li class="chapter-item "><a href="../../posts/rust/rust_life_cycle.html"><strong aria-hidden="true">7.5.</strong> Rust life cycle</a></li><li class="chapter-item "><a href="../../posts/rust/rust_generic.html"><strong aria-hidden="true">7.6.</strong> rust generics</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implment_matrix.html"><strong aria-hidden="true">7.7.</strong> Rust implement matrix</a></li><li class="chapter-item "><a href="../../posts/rust/rust_sort.html"><strong aria-hidden="true">7.8.</strong> Rust implement sort algorithms</a></li><li class="chapter-item "><a href="../../posts/rust/implement_aes_encryption.html"><strong aria-hidden="true">7.9.</strong> Rust implement AEC encryption and decryption</a></li><li class="chapter-item "><a href="../../posts/rust/implement_trie_data_structure.html"><strong aria-hidden="true">7.10.</strong> implement trie data structure</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_tree.html"><strong aria-hidden="true">7.11.</strong> implement tree data_structure</a></li><li class="chapter-item "><a href="../../posts/rust/list_dir.html"><strong aria-hidden="true">7.12.</strong> list dir</a></li><li class="chapter-item "><a href="../../posts/rust/fast_way_to_implment_object_trait.html"><strong aria-hidden="true">7.13.</strong> fast way to implment object trait</a></li><li class="chapter-item "><a href="../../posts/rust/compress_rust_binary_size.html"><strong aria-hidden="true">7.14.</strong> compress rust binary size</a></li><li class="chapter-item "><a href="../../posts/rust/implment_file_upload_backend.html"><strong aria-hidden="true">7.15.</strong> impliment file upload</a></li><li class="chapter-item "><a href="../../posts/rust/this_is_add_post_cli_implementation_in_rust.html"><strong aria-hidden="true">7.16.</strong> this is add_post cli implementation in rust</a></li><li class="chapter-item "><a href="../../posts/rust/use_rust_implment_a_copyclipbord_cli.html"><strong aria-hidden="true">7.17.</strong> Use rust implment a copyclipbord CLI</a></li><li class="chapter-item "><a href="../../posts/rust/sqlite_database_add_delete_update_show_in_rust.html"><strong aria-hidden="true">7.18.</strong> sqlite database add delete update show in rust</a></li><li class="chapter-item "><a href="../../posts/rust/implementing_tokio_joinhandle_for_wasm.html"><strong aria-hidden="true">7.19.</strong> Implementing tokio JoinHandle for wasm</a></li><li class="chapter-item "><a href="../../posts/rust/rust_implement_a_crate_for_encode_and_decode_brainfuck_and_ook.html"><strong aria-hidden="true">7.20.</strong> rust implement a crate for encode and decode brainfuck and ook</a></li><li class="chapter-item "><a href="../../posts/rust/slint_builtin_elements.html"><strong aria-hidden="true">7.21.</strong> Slint Builtin Elements</a></li><li class="chapter-item "><a href="../../posts/rust/corporate_network_install_rust_on_windows.html"><strong aria-hidden="true">7.22.</strong> Corporate network install Rust on windows</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_file_how_to_judge_static_link_or_dynamic_link_in_macos.html"><strong aria-hidden="true">7.23.</strong> rust binary file how to judge static link or dynamic link in Macos</a></li><li class="chapter-item "><a href="../../posts/rust/rust_binary_include_dir_and_get_contents.html"><strong aria-hidden="true">7.24.</strong> rust binary include dir and get contents</a></li><li class="chapter-item "><a href="../../posts/rust/rust_logger_non-block.html"><strong aria-hidden="true">7.25.</strong> rust logger non-block</a></li><li class="chapter-item "><a href="../../posts/rust/rust_connect_sql_server_database.html"><strong aria-hidden="true">7.26.</strong> rust connect sql server database</a></li><li class="chapter-item "><a href="../../posts/rust/rust_websocket_implment.html"><strong aria-hidden="true">7.27.</strong> rust websocket implment</a></li></ol></li><li class="chapter-item "><a href="../../posts/java/java.html"><strong aria-hidden="true">8.</strong> java</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/java/java_grammar.html"><strong aria-hidden="true">8.1.</strong> java grammar and codewar</a></li><li class="chapter-item "><a href="../../posts/java/run_jar.html"><strong aria-hidden="true">8.2.</strong> java run .jar</a></li><li class="chapter-item "><a href="../../posts/java/java_pomxml_add_defaultgoal_to_build.html"><strong aria-hidden="true">8.3.</strong> Java pomxml add defaultGoal to build</a></li><li class="chapter-item "><a href="../../posts/java/java_set_mvn_mirror.html"><strong aria-hidden="true">8.4.</strong> Java set mvn mirror</a></li></ol></li><li class="chapter-item "><a href="../../posts/python/python.html"><strong aria-hidden="true">9.</strong> python</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/python/convert_pesn.html"><strong aria-hidden="true">9.1.</strong> convert pesn</a></li><li class="chapter-item "><a href="../../posts/python/find_remove_dir.html"><strong aria-hidden="true">9.2.</strong> find and remove dir</a></li><li class="chapter-item "><a href="../../posts/python/timing_message.html"><strong aria-hidden="true">9.3.</strong> wechat send message</a></li><li class="chapter-item "><a href="../../posts/python/use_python_openpyxl_package_read_and_edit_excel_files.html"><strong aria-hidden="true">9.4.</strong> Use python openpyxl package read and edit excel files</a></li></ol></li><li class="chapter-item "><a href="../../posts/go/go.html"><strong aria-hidden="true">10.</strong> go</a></li><li class="chapter-item "><a href="../../posts/js/js.html"><strong aria-hidden="true">11.</strong> js</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/js/js_tutorial.html"><strong aria-hidden="true">11.1.</strong> js tutorial</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_map.html"><strong aria-hidden="true">11.2.</strong> ja map</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_math.html"><strong aria-hidden="true">11.3.</strong> js math</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_object.html"><strong aria-hidden="true">11.4.</strong> js object</a></li><li class="chapter-item "><a href="../../posts/js/js_tutorial_set.html"><strong aria-hidden="true">11.5.</strong> js set</a></li><li class="chapter-item "><a href="../../posts/js/single_thread_and_asynchronous.html"><strong aria-hidden="true">11.6.</strong> single thread and asynchronous</a></li><li class="chapter-item "><a href="../../posts/js/this.html"><strong aria-hidden="true">11.7.</strong> js this</a></li><li class="chapter-item "><a href="../../posts/js/js_implment_aes.html"><strong aria-hidden="true">11.8.</strong> js implment aes</a></li><li class="chapter-item "><a href="../../posts/js/getting_started_with_ajax.html"><strong aria-hidden="true">11.9.</strong> getting started with ajax</a></li><li class="chapter-item "><a href="../../posts/js/BinarySearchTree.html"><strong aria-hidden="true">11.10.</strong> binary search tree</a></li><li class="chapter-item "><a href="../../posts/js/goole_zx.html"><strong aria-hidden="true">11.11.</strong> goole zx</a></li><li class="chapter-item "><a href="../../posts/js/es6.html"><strong aria-hidden="true">11.12.</strong> es6</a></li></ol></li><li class="chapter-item "><a href="../../posts/ruby/ruby.html"><strong aria-hidden="true">12.</strong> ruby</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ruby/rails_setup_env.html"><strong aria-hidden="true">12.1.</strong> ruby on rails setup environment</a></li><li class="chapter-item "><a href="../../posts/ruby/learn_ruby.html"><strong aria-hidden="true">12.2.</strong> learn ruby</a></li><li class="chapter-item "><a href="../../posts/ruby/ruby_note.html"><strong aria-hidden="true">12.3.</strong> Ruby Note</a></li><li class="chapter-item "><a href="../../posts/ruby/setup_ruby_for_ctf.html"><strong aria-hidden="true">12.4.</strong> Setup ruby for CTF</a></li></ol></li><li class="chapter-item "><a href="../../posts/react/react.html"><strong aria-hidden="true">13.</strong> react</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/react/react_life_cycle.html"><strong aria-hidden="true">13.1.</strong> react life cycle</a></li><li class="chapter-item "><a href="../../posts/react/react_router.html"><strong aria-hidden="true">13.2.</strong> react router</a></li><li class="chapter-item "><a href="../../posts/react/react_this.html"><strong aria-hidden="true">13.3.</strong> react this</a></li><li class="chapter-item "><a href="../../posts/react/react_interviw.html"><strong aria-hidden="true">13.4.</strong> react interview</a></li><li class="chapter-item "><a href="../../posts/react/important_react_interview.html"><strong aria-hidden="true">13.5.</strong> important react interview</a></li><li class="chapter-item "><a href="../../posts/react/react_quick_reference.html"><strong aria-hidden="true">13.6.</strong> react quick reference</a></li><li class="chapter-item "><a href="../../posts/react/redux_quick_reference.html"><strong aria-hidden="true">13.7.</strong> redux quick reference</a></li></ol></li><li class="chapter-item "><a href="../../posts/vue/vue.html"><strong aria-hidden="true">14.</strong> vue</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/vue/vue_ajax.html"><strong aria-hidden="true">14.1.</strong> vue ajax</a></li></ol></li><li class="chapter-item "><a href="../../posts/angular/angular.html"><strong aria-hidden="true">15.</strong> angular</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/angular/controller_communication.html"><strong aria-hidden="true">15.1.</strong> controller communication</a></li><li class="chapter-item "><a href="../../posts/angular/creating_custom_directives.html"><strong aria-hidden="true">15.2.</strong> creating custom directives</a></li><li class="chapter-item "><a href="../../posts/angular/directive_notes.html"><strong aria-hidden="true">15.3.</strong> directive notes</a></li><li class="chapter-item "><a href="../../posts/angular/directive_communication.html"><strong aria-hidden="true">15.4.</strong> directive communication</a></li><li class="chapter-item "><a href="../../posts/angular/post_params.html"><strong aria-hidden="true">15.5.</strong> post params</a></li><li class="chapter-item "><a href="../../posts/angular/read_json_angular.html"><strong aria-hidden="true">15.6.</strong> read json angular</a></li><li class="chapter-item "><a href="../../posts/angular/same_route_reload.html"><strong aria-hidden="true">15.7.</strong> same route reload</a></li></ol></li><li class="chapter-item "><a href="../../posts/css/css.html"><strong aria-hidden="true">16.</strong> css</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/css/use_css_media.html"><strong aria-hidden="true">16.1.</strong> use css media</a></li></ol></li><li class="chapter-item expanded "><a href="../../posts/php/php.html"><strong aria-hidden="true">17.</strong> php</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/php/for_php_string_implment_some_extemtion_functions.html"><strong aria-hidden="true">17.1.</strong> for php string implment some extemtion functions</a></li><li class="chapter-item expanded "><a href="../../posts/php/php_cheatsheet.html" class="active"><strong aria-hidden="true">17.2.</strong> PHP cheatsheet</a></li></ol></li><li class="chapter-item "><a href="../../posts/leetcode/leetcode.html"><strong aria-hidden="true">18.</strong> leetcode</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/leetcode/rust_leetcode.html"><strong aria-hidden="true">18.1.</strong> rust leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_codewar.html"><strong aria-hidden="true">18.2.</strong> rust codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/swift_codewar.html"><strong aria-hidden="true">18.3.</strong> swift codewar</a></li><li class="chapter-item "><a href="../../posts/leetcode/js_leetcode.html"><strong aria-hidden="true">18.4.</strong> js leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/java_leetcode.html"><strong aria-hidden="true">18.5.</strong> java leetcode</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_huawei.html"><strong aria-hidden="true">18.6.</strong> huawei test</a></li><li class="chapter-item "><a href="../../posts/leetcode/rust_utils.html"><strong aria-hidden="true">18.7.</strong> rust common functions</a></li><li class="chapter-item "><a href="../../posts/leetcode/olympiad_training.html"><strong aria-hidden="true">18.8.</strong> Computer olympiad training</a></li></ol></li><li class="chapter-item "><a href="../../posts/ctf/CTF.html"><strong aria-hidden="true">19.</strong> ctf</a><a class="toggle"><div>❱</div></a></li><li><ol class="section"><li class="chapter-item "><a href="../../posts/ctf/CTF_Note.html"><strong aria-hidden="true">19.1.</strong> CTF Note</a></li><li class="chapter-item "><a href="../../posts/ctf/0.1_Web.html"><strong aria-hidden="true">19.2.</strong> Web</a></li><li class="chapter-item "><a href="../../posts/ctf/4.1_Misc.html"><strong aria-hidden="true">19.3.</strong> Misc</a></li><li class="chapter-item "><a href="../../posts/ctf/3.2_PWN_note.html"><strong aria-hidden="true">19.4.</strong> PWN</a></li><li class="chapter-item "><a href="../../posts/ctf/3.1_Crypto.html"><strong aria-hidden="true">19.5.</strong> Crypto</a></li><li class="chapter-item "><a href="../../posts/ctf/3.4_RSA_note.html"><strong aria-hidden="true">19.6.</strong> Rsa attack</a></li><li class="chapter-item "><a href="../../posts/ctf/3.5_Base64.html"><strong aria-hidden="true">19.7.</strong> Base64</a></li><li class="chapter-item "><a href="../../posts/ctf/0.0_SQL Injection Cheatsheet.html"><strong aria-hidden="true">19.8.</strong> SQL Injection Cheatsheet</a></li><li class="chapter-item "><a href="../../posts/ctf/1.1_SQL_injection.html"><strong aria-hidden="true">19.9.</strong> SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.2_SQL_injection_UNION_attacks.html"><strong aria-hidden="true">19.10.</strong> SQL Injection UNION attacks</a></li><li class="chapter-item "><a href="../../posts/ctf/1.3_Blind SQL injection.html"><strong aria-hidden="true">19.11.</strong> Blind SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.4_Code Injection.html"><strong aria-hidden="true">19.12.</strong> Code Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.5_SSRF.html"><strong aria-hidden="true">19.13.</strong> SSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.6_OS command injection.html"><strong aria-hidden="true">19.14.</strong> OS command injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.7_Local file inclusion.html"><strong aria-hidden="true">19.15.</strong> Local file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.8_Remote file inclusion.html"><strong aria-hidden="true">19.16.</strong> Remote file inclusion</a></li><li class="chapter-item "><a href="../../posts/ctf/1.9_CSRFm.html"><strong aria-hidden="true">19.17.</strong> CSRF</a></li><li class="chapter-item "><a href="../../posts/ctf/1.10_NoSQL injection.html"><strong aria-hidden="true">19.18.</strong> NoSQL injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.11_JSON injection.html"><strong aria-hidden="true">19.19.</strong> JSON injection</a></li><li class="chapter-item "><a href="../../posts/ctf/1.12_CTF_Web_SQL_Note.html"><strong aria-hidden="true">19.20.</strong> CTF Web SQL Note</a></li><li class="chapter-item "><a href="../../posts/ctf/2.1_XXE.html"><strong aria-hidden="true">19.21.</strong> XXE</a></li><li class="chapter-item "><a href="../../posts/ctf/2.2_XSS.html"><strong aria-hidden="true">19.22.</strong> XSS</a></li><li class="chapter-item "><a href="../../posts/ctf/2.3_Upload File.html"><strong aria-hidden="true">19.23.</strong> Upload File</a></li><li class="chapter-item "><a href="../../posts/ctf/2.4_serialize_unserialize.html"><strong aria-hidden="true">19.24.</strong> serialize unserialize</a></li><li class="chapter-item "><a href="../../posts/ctf/2.5_Race condition.html"><strong aria-hidden="true">19.25.</strong> Race condition</a></li><li class="chapter-item "><a href="../../posts/ctf/3.2_PWN_note.html"><strong aria-hidden="true">19.26.</strong> PWN_note</a></li><li class="chapter-item "><a href="../../posts/ctf/3.3_pwn HCTF2016 brop.html"><strong aria-hidden="true">19.27.</strong> pwn HCTF2016 brop</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_patch_defense_skill.html"><strong aria-hidden="true">19.28.</strong> PWN Patch defense skill</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_stack_overflow.html"><strong aria-hidden="true">19.29.</strong> PWN stack overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_heap_overflow.html"><strong aria-hidden="true">19.30.</strong> PWN heap overflow</a></li><li class="chapter-item "><a href="../../posts/ctf/pwn_format_string_vulnerability.html"><strong aria-hidden="true">19.31.</strong> PWN Format String Vulnerability</a></li><li class="chapter-item "><a href="../../posts/ctf/kali_linux_tutorials.html"><strong aria-hidden="true">19.32.</strong> Kali linux tutorials</a></li><li class="chapter-item "><a href="../../posts/ctf/google_dorks_2023_lists.html"><strong aria-hidden="true">19.33.</strong> Google Dorks 2023 Lists</a></li><li class="chapter-item "><a href="../../posts/ctf/dvwa_writeup.html"><strong aria-hidden="true">19.34.</strong> DVWA WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/bwapp_writeup.html"><strong aria-hidden="true">19.35.</strong> bWAPP WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/sqlilabs_writeup.html"><strong aria-hidden="true">19.36.</strong> sqlilabs WriteUp</a></li><li class="chapter-item "><a href="../../posts/ctf/ctf_train_at_hangzhou.html"><strong aria-hidden="true">19.37.</strong> ctf train at hangzhou</a></li><li class="chapter-item "><a href="../../posts/ctf/ctf_common_mindmap_list.html"><strong aria-hidden="true">19.38.</strong> ctf common mindmap list</a></li><li class="chapter-item "><a href="../../posts/ctf/error_based_sql_injection.html"><strong aria-hidden="true">19.39.</strong> Error Based SQL Injection</a></li><li class="chapter-item "><a href="../../posts/ctf/urlfinder_tutorial.html"><strong aria-hidden="true">19.40.</strong> URLFinder Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/observer_ward_tutorial.html"><strong aria-hidden="true">19.41.</strong> observer_ward Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/mysql_udf_.html"><strong aria-hidden="true">19.42.</strong> MySQL UDF 提权</a></li><li class="chapter-item "><a href="../../posts/ctf/nuclei__tutorial.html"><strong aria-hidden="true">19.43.</strong> Nuclei Tutorial</a></li><li class="chapter-item "><a href="../../posts/ctf/2024_ctf_solution_thinking.html"><strong aria-hidden="true">19.44.</strong> 2024 ctf solution thinking</a></li><li class="chapter-item "><a href="../../posts/ctf/man_che_si_te_bian_ma.html"><strong aria-hidden="true">19.45.</strong> 曼彻斯特编码</a></li></ol></li></ol>
|
||
</div>
|
||
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
|
||
<div class="sidebar-resize-indicator"></div>
|
||
</div>
|
||
</nav>
|
||
|
||
<!-- Track and set sidebar scroll position -->
|
||
<script>
|
||
var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
|
||
sidebarScrollbox.addEventListener('click', function(e) {
|
||
if (e.target.tagName === 'A') {
|
||
sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
|
||
}
|
||
}, { passive: true });
|
||
var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
|
||
sessionStorage.removeItem('sidebar-scroll');
|
||
if (sidebarScrollTop) {
|
||
// preserve sidebar scroll position when navigating via links within sidebar
|
||
sidebarScrollbox.scrollTop = sidebarScrollTop;
|
||
} else {
|
||
// scroll sidebar to current active section when navigating via "next/previous chapter" buttons
|
||
var activeSection = document.querySelector('#sidebar .active');
|
||
if (activeSection) {
|
||
activeSection.scrollIntoView({ block: 'center' });
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<div id="page-wrapper" class="page-wrapper">
|
||
|
||
<div class="page">
|
||
<div id="menu-bar-hover-placeholder"></div>
|
||
<div id="menu-bar" class="menu-bar sticky">
|
||
<div class="left-buttons">
|
||
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
|
||
<i class="fa fa-bars"></i>
|
||
</label>
|
||
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
|
||
<i class="fa fa-paint-brush"></i>
|
||
</button>
|
||
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
|
||
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
|
||
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
|
||
</ul>
|
||
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
|
||
<i class="fa fa-search"></i>
|
||
</button>
|
||
</div>
|
||
|
||
<h1 class="menu-title">Andrew's Blog</h1>
|
||
|
||
<div class="right-buttons">
|
||
<a href="https://gitlink.org.cn/dnrops/dnrops.gitlink.net.git" title="Git repository" aria-label="Git repository">
|
||
<i id="git-repository-button" class="fa fa-github"></i>
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div id="search-wrapper" class="hidden">
|
||
<form id="searchbar-outer" class="searchbar-outer">
|
||
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
|
||
</form>
|
||
<div id="searchresults-outer" class="searchresults-outer hidden">
|
||
<div id="searchresults-header" class="searchresults-header"></div>
|
||
<ul id="searchresults">
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
|
||
<script>
|
||
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
|
||
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
|
||
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
|
||
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
|
||
});
|
||
</script>
|
||
|
||
<div id="content" class="content">
|
||
<main>
|
||
<h1 id="php-cheatsheet"><a class="header" href="#php-cheatsheet">PHP cheatsheet</a></h1>
|
||
<p>This <a href="https://www.php.net/manual/en/">PHP</a> cheat sheet provides a reference for quickly looking up the correct syntax for the code you use most frequently.</p>
|
||
<h2 id="getting-started"><a class="header" href="#getting-started"><a href="https://quickref.me/php#getting-started">#</a>Getting Started</a></h2>
|
||
<h3 id="hellophp"><a class="header" href="#hellophp">hello.php</a></h3>
|
||
<pre><code><?php // begin with a PHP open tag.
|
||
echo "Hello World\n";
|
||
print("Hello quickref.me");
|
||
?>
|
||
</code></pre>
|
||
<p>PHP run command</p>
|
||
<pre><code>$ php hello.php
|
||
</code></pre>
|
||
<h3 id="variables"><a class="header" href="#variables">Variables</a></h3>
|
||
<pre><code>$boolean1 = true;
|
||
$boolean2 = True;
|
||
$int = 12;
|
||
$float = 3.1415926;
|
||
unset($float); // Delete variable
|
||
$str1 = "How are you?";
|
||
$str2 = 'Fine, thanks';
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-types">Types</a></p>
|
||
<h3 id="strings"><a class="header" href="#strings">Strings</a></h3>
|
||
<pre><code>$url = "quickref.me";
|
||
echo "I'm learning PHP at $url";
|
||
// Concatenate strings
|
||
echo "I'm learning PHP at " . $url;
|
||
$hello = "Hello, ";
|
||
$hello .= "World!";
|
||
echo $hello; # => Hello, World!
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-strings">Strings</a></p>
|
||
<h3 id="arrays"><a class="header" href="#arrays">Arrays</a></h3>
|
||
<pre><code>$num = [1, 3, 5, 7, 9];
|
||
$num[5] = 11;
|
||
unset($num[2]); // Delete variable
|
||
print_r($num); # => 1 3 7 9 11
|
||
echo count($num); # => 5
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-arrays">Arrays</a></p>
|
||
<h3 id="operators"><a class="header" href="#operators">Operators</a></h3>
|
||
<pre><code>$x = 1;
|
||
$y = 2;
|
||
$sum = $x + $y;
|
||
echo $sum; # => 3
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-operators">Operators</a></p>
|
||
<h3 id="include"><a class="header" href="#include">Include</a></h3>
|
||
<h4 id="varsphp"><a class="header" href="#varsphp">vars.php</a></h4>
|
||
<pre><code><?php // begin with a PHP open tag.
|
||
$fruit = 'apple';
|
||
echo "I was imported";
|
||
return 'Anything you like.';
|
||
?>
|
||
</code></pre>
|
||
<h4 id="testphp"><a class="header" href="#testphp">test.php</a></h4>
|
||
<pre><code><?php
|
||
include 'vars.php';
|
||
echo $fruit . "\n"; # => apple
|
||
/* Same as include,
|
||
cause an error if cannot be included*/
|
||
require 'vars.php';
|
||
// Also works
|
||
include('vars.php');
|
||
require('vars.php');
|
||
// Include through HTTP
|
||
include 'http://x.com/file.php';
|
||
// Include and the return statement
|
||
$result = include 'vars.php';
|
||
echo $result; # => Anything you like.
|
||
?>
|
||
</code></pre>
|
||
<h3 id="functions"><a class="header" href="#functions">Functions</a></h3>
|
||
<pre><code>function add($num1, $num2 = 1) {
|
||
return $num1 + $num2;
|
||
}
|
||
echo add(10); # => 11
|
||
echo add(10, 5); # => 15
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-functions">Functions</a></p>
|
||
<h3 id="comments"><a class="header" href="#comments">Comments</a></h3>
|
||
<pre><code># This is a one line shell-style comment
|
||
// This is a one line c++ style comment
|
||
/* This is a multi line comment
|
||
yet another line of comment */
|
||
</code></pre>
|
||
<h3 id="constants"><a class="header" href="#constants">Constants</a></h3>
|
||
<pre><code>const MY_CONST = "hello";
|
||
echo MY_CONST; # => hello
|
||
# => MY_CONST is: hello
|
||
echo 'MY_CONST is: ' . MY_CONST;
|
||
</code></pre>
|
||
<h3 id="classes"><a class="header" href="#classes">Classes</a></h3>
|
||
<pre><code>class Student {
|
||
public function __construct($name) {
|
||
$this->name = $name;
|
||
}
|
||
}
|
||
$alex = new Student("Alex");
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-classes">Classes</a></p>
|
||
<h2 id="php-types"><a class="header" href="#php-types"><a href="https://quickref.me/php#php-types">#</a>PHP Types</a></h2>
|
||
<h3 id="boolean"><a class="header" href="#boolean">Boolean</a></h3>
|
||
<pre><code>$boolean1 = true;
|
||
$boolean2 = TRUE;
|
||
$boolean3 = false;
|
||
$boolean4 = FALSE;
|
||
$boolean5 = (boolean) 1; # => true
|
||
$boolean6 = (boolean) 0; # => false
|
||
</code></pre>
|
||
<p>Boolean are case-insensitive</p>
|
||
<h3 id="integer"><a class="header" href="#integer">Integer</a></h3>
|
||
<pre><code>$int1 = 28; # => 28
|
||
$int2 = -32; # => -32
|
||
$int3 = 012; # => 10 (octal)
|
||
$int4 = 0x0F; # => 15 (hex)
|
||
$int5 = 0b101; # => 5 (binary)
|
||
# => 2000100000 (decimal, PHP 7.4.0)
|
||
$int6 = 2_000_100_000;
|
||
</code></pre>
|
||
<p>See also: <a href="https://www.php.net/manual/en/language.types.integer.php">Integers</a></p>
|
||
<h3 id="strings-1"><a class="header" href="#strings-1">Strings</a></h3>
|
||
<pre><code>echo 'this is a simple string';
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-strings">Strings</a></p>
|
||
<h3 id="arrays-1"><a class="header" href="#arrays-1">Arrays</a></h3>
|
||
<pre><code>$arr = array("hello", "world", "!");
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-arrays">Arrays</a></p>
|
||
<h3 id="float-double"><a class="header" href="#float-double">Float (Double)</a></h3>
|
||
<pre><code>$float1 = 1.234;
|
||
$float2 = 1.2e7;
|
||
$float3 = 7E-10;
|
||
$float4 = 1_234.567; // as of PHP 7.4.0
|
||
var_dump($float4); // float(1234.567)
|
||
$float5 = 1 + "10.5"; # => 11.5
|
||
$float6 = 1 + "-1.3e3"; # => -1299
|
||
</code></pre>
|
||
<h3 id="null"><a class="header" href="#null">Null</a></h3>
|
||
<pre><code>$a = null;
|
||
$b = 'Hello php!';
|
||
echo $a ?? 'a is unset'; # => a is unset
|
||
echo $b ?? 'b is unset'; # => Hello php
|
||
$a = array();
|
||
$a == null # => true
|
||
$a === null # => false
|
||
is_null($a) # => false
|
||
</code></pre>
|
||
<h3 id="iterables"><a class="header" href="#iterables">Iterables</a></h3>
|
||
<pre><code>function bar(): iterable {
|
||
return [1, 2, 3];
|
||
}
|
||
function gen(): iterable {
|
||
yield 1;
|
||
yield 2;
|
||
yield 3;
|
||
}
|
||
foreach (bar() as $value) {
|
||
echo $value; # => 123
|
||
}
|
||
</code></pre>
|
||
<h2 id="php-strings"><a class="header" href="#php-strings"><a href="https://quickref.me/php#php-strings">#</a>PHP Strings</a></h2>
|
||
<h3 id="string"><a class="header" href="#string">String</a></h3>
|
||
<pre><code># => '$String'
|
||
$sgl_quotes = '$String';
|
||
# => 'This is a $String.'
|
||
$dbl_quotes = "This is a $sgl_quotes.";
|
||
# => a tab character.
|
||
$escaped = "a \t tab character.";
|
||
# => a slash and a t: \t
|
||
$unescaped = 'a slash and a t: \t';
|
||
</code></pre>
|
||
<h3 id="multi-line"><a class="header" href="#multi-line">Multi-line</a></h3>
|
||
<pre><code>$str = "foo";
|
||
// Uninterpolated multi-liners
|
||
$nowdoc = <<<'END'
|
||
Multi line string
|
||
$str
|
||
END;
|
||
// Will do string interpolation
|
||
$heredoc = <<<END
|
||
Multi line
|
||
$str
|
||
END;
|
||
</code></pre>
|
||
<h3 id="manipulation"><a class="header" href="#manipulation">Manipulation</a></h3>
|
||
<pre><code>$s = "Hello Phper";
|
||
echo strlen($s); # => 11
|
||
echo substr($s, 0, 3); # => Hel
|
||
echo substr($s, 1); # => ello Phper
|
||
echo substr($s, -4, 3);# => hpe
|
||
echo strtoupper($s); # => HELLO PHPER
|
||
echo strtolower($s); # => hello phper
|
||
echo strpos($s, "l"); # => 2
|
||
var_dump(strpos($s, "L")); # => false
|
||
</code></pre>
|
||
<p>See: <a href="https://www.php.net/manual/en/ref.strings.php">String Functions</a></p>
|
||
<h2 id="php-arrays"><a class="header" href="#php-arrays"><a href="https://quickref.me/php#php-arrays">#</a>PHP Arrays</a></h2>
|
||
<h3 id="defining"><a class="header" href="#defining">Defining</a></h3>
|
||
<pre><code>$a1 = ["hello", "world", "!"]
|
||
$a2 = array("hello", "world", "!");
|
||
$a3 = explode(",", "apple,pear,peach");
|
||
</code></pre>
|
||
<h4 id="mixed-int-and-string-keys"><a class="header" href="#mixed-int-and-string-keys">Mixed int and string keys</a></h4>
|
||
<pre><code>$array = array(
|
||
"foo" => "bar",
|
||
"bar" => "foo",
|
||
100 => -100,
|
||
-100 => 100,
|
||
);
|
||
var_dump($array);
|
||
</code></pre>
|
||
<h4 id="short-array-syntax"><a class="header" href="#short-array-syntax">Short array syntax</a></h4>
|
||
<pre><code>$array = [
|
||
"foo" => "bar",
|
||
"bar" => "foo",
|
||
];
|
||
</code></pre>
|
||
<h3 id="multi-array"><a class="header" href="#multi-array">Multi array</a></h3>
|
||
<pre><code>$multiArray = [
|
||
[1, 2, 3],
|
||
[4, 5, 6],
|
||
[7, 8, 9],
|
||
];
|
||
print_r($multiArray[0][0]) # => 1
|
||
print_r($multiArray[0][1]) # => 2
|
||
print_r($multiArray[0][2]) # => 3
|
||
</code></pre>
|
||
<h3 id="multi-type"><a class="header" href="#multi-type">Multi type</a></h3>
|
||
<pre><code>$array = array(
|
||
"foo" => "bar",
|
||
42 => 24,
|
||
"multi" => array(
|
||
"dim" => array(
|
||
"a" => "foo"
|
||
)
|
||
)
|
||
);
|
||
# => string(3) "bar"
|
||
var_dump($array["foo"]);
|
||
# => int(24)
|
||
var_dump($array[42]);
|
||
# => string(3) "foo"
|
||
var_dump($array["multi"]["dim"]["a"]);
|
||
</code></pre>
|
||
<h3 id="manipulation-1"><a class="header" href="#manipulation-1">manipulation</a></h3>
|
||
<pre><code>$arr = array(5 => 1, 12 => 2);
|
||
$arr[] = 56; // Append
|
||
$arr["x"] = 42; // Add with key
|
||
sort($arr); // Sort
|
||
unset($arr[5]); // Remove
|
||
unset($arr); // Remove all
|
||
</code></pre>
|
||
<p>See: <a href="https://www.php.net/manual/en/ref.array.php">Array Functions</a></p>
|
||
<h3 id="indexing-iteration"><a class="header" href="#indexing-iteration">Indexing iteration</a></h3>
|
||
<pre><code>$array = array('a', 'b', 'c');
|
||
$count = count($array);
|
||
for ($i = 0; $i < $count; $i++) {
|
||
echo "i:{$i}, v:{$array[$i]}\n";
|
||
}
|
||
</code></pre>
|
||
<h3 id="value-iteration"><a class="header" href="#value-iteration">Value iteration</a></h3>
|
||
<pre><code>$colors = array('red', 'blue', 'green');
|
||
foreach ($colors as $color) {
|
||
echo "Do you like $color?\n";
|
||
}
|
||
</code></pre>
|
||
<h3 id="key-iteration"><a class="header" href="#key-iteration">Key iteration</a></h3>
|
||
<pre><code>$arr = ["foo" => "bar", "bar" => "foo"];
|
||
foreach ( $arr as $key => $value )
|
||
{
|
||
echo "key: " . $key . "\n";
|
||
echo "val: {$arr[$key]}\n";
|
||
}
|
||
</code></pre>
|
||
<h3 id="concatenate-arrays"><a class="header" href="#concatenate-arrays">Concatenate arrays</a></h3>
|
||
<pre><code>$a = [1, 2];
|
||
$b = [3, 4];
|
||
// PHP 7.4 later
|
||
# => [1, 2, 3, 4]
|
||
$result = [...$a, ...$b];
|
||
</code></pre>
|
||
<h3 id="into-functions"><a class="header" href="#into-functions">Into functions</a></h3>
|
||
<pre><code>$array = [1, 2];
|
||
function foo(int $a, int $b) {
|
||
echo $a; # => 1
|
||
echo $b; # => 2
|
||
}
|
||
foo(...$array);
|
||
</code></pre>
|
||
<h3 id="splat-operator"><a class="header" href="#splat-operator">Splat Operator</a></h3>
|
||
<pre><code>function foo($first, ...$other) {
|
||
var_dump($first); # => a
|
||
var_dump($other); # => ['b', 'c']
|
||
}
|
||
foo('a', 'b', 'c' /*, ...*/ );
|
||
// or
|
||
function foo($first, string ...$other){}
|
||
</code></pre>
|
||
<h2 id="php-operators"><a class="header" href="#php-operators"><a href="https://quickref.me/php#php-operators">#</a>PHP Operators</a></h2>
|
||
<h3 id="arithmetic"><a class="header" href="#arithmetic">Arithmetic</a></h3>
|
||
<div class="table-wrapper"><table><thead><tr><th><code>+</code></th><th>Addition</th></tr></thead><tbody>
|
||
<tr><td><code>-</code></td><td>Subtraction</td></tr>
|
||
<tr><td><code>*</code></td><td>Multiplication</td></tr>
|
||
<tr><td><code>/</code></td><td>Division</td></tr>
|
||
<tr><td><code>%</code></td><td>Modulo</td></tr>
|
||
<tr><td><code>**</code></td><td>Exponentiation</td></tr>
|
||
</tbody></table>
|
||
</div>
|
||
<h3 id="assignment"><a class="header" href="#assignment">Assignment</a></h3>
|
||
<div class="table-wrapper"><table><thead><tr><th><code>a += b</code></th><th>Same as <code>a = a + b</code></th></tr></thead><tbody>
|
||
<tr><td><code>a -= b</code></td><td>Same as <code>a = a – b</code></td></tr>
|
||
<tr><td><code>a *= b</code></td><td>Same as <code>a = a * b</code></td></tr>
|
||
<tr><td><code>a /= b</code></td><td>Same as <code>a = a / b</code></td></tr>
|
||
<tr><td><code>a %= b</code></td><td>Same as <code>a = a % b</code></td></tr>
|
||
</tbody></table>
|
||
</div>
|
||
<h3 id="comparison"><a class="header" href="#comparison">Comparison</a></h3>
|
||
<div class="table-wrapper"><table><thead><tr><th><code>==</code></th><th>Equal</th></tr></thead><tbody>
|
||
<tr><td><code>===</code></td><td>Identical</td></tr>
|
||
<tr><td><code>!=</code></td><td>Not equal</td></tr>
|
||
<tr><td><code><></code></td><td>Not equal</td></tr>
|
||
<tr><td><code>!==</code></td><td>Not identical</td></tr>
|
||
<tr><td><code><</code></td><td>Less than</td></tr>
|
||
<tr><td><code>></code></td><td>Greater than</td></tr>
|
||
<tr><td><code><=</code></td><td>Less than or equal</td></tr>
|
||
<tr><td><code>>=</code></td><td>Greater than or equal</td></tr>
|
||
<tr><td><code><=></code></td><td>Less than/equal/greater than</td></tr>
|
||
</tbody></table>
|
||
</div>
|
||
<h3 id="logical"><a class="header" href="#logical">Logical</a></h3>
|
||
<div class="table-wrapper"><table><thead><tr><th><code>and</code></th><th>And</th></tr></thead><tbody>
|
||
<tr><td><code>or</code></td><td>Or</td></tr>
|
||
<tr><td><code>xor</code></td><td>Exclusive or</td></tr>
|
||
<tr><td><code>!</code></td><td>Not</td></tr>
|
||
<tr><td><code>&&</code></td><td>And</td></tr>
|
||
<tr><td>`</td><td></td></tr>
|
||
</tbody></table>
|
||
</div>
|
||
<h3 id="arithmetic-1"><a class="header" href="#arithmetic-1">Arithmetic</a></h3>
|
||
<pre><code>// Arithmetic
|
||
$sum = 1 + 1; // 2
|
||
$difference = 2 - 1; // 1
|
||
$product = 2 * 2; // 4
|
||
$quotient = 2 / 1; // 2
|
||
// Shorthand arithmetic
|
||
$num = 0;
|
||
$num += 1; // Increment $num by 1
|
||
echo $num++; // Prints 1 (increments after evaluation)
|
||
echo ++$num; // Prints 3 (increments before evaluation)
|
||
$num /= $float; // Divide and assign the quotient to $num
|
||
</code></pre>
|
||
<h3 id="bitwise"><a class="header" href="#bitwise">Bitwise</a></h3>
|
||
<div class="table-wrapper"><table><thead><tr><th><code>&</code></th><th>And</th></tr></thead><tbody>
|
||
<tr><td>`</td><td>`</td></tr>
|
||
<tr><td><code>^</code></td><td>Xor (exclusive or)</td></tr>
|
||
<tr><td><code>~</code></td><td>Not</td></tr>
|
||
<tr><td><code><<</code></td><td>Shift left</td></tr>
|
||
<tr><td><code>>></code></td><td>Shift right</td></tr>
|
||
</tbody></table>
|
||
</div>
|
||
<h2 id="php-conditionals"><a class="header" href="#php-conditionals"><a href="https://quickref.me/php#php-conditionals">#</a>PHP Conditionals</a></h2>
|
||
<h3 id="if-elseif-else"><a class="header" href="#if-elseif-else">If elseif else</a></h3>
|
||
<pre><code>$a = 10;
|
||
$b = 20;
|
||
if ($a > $b) {
|
||
echo "a is bigger than b";
|
||
} elseif ($a == $b) {
|
||
echo "a is equal to b";
|
||
} else {
|
||
echo "a is smaller than b";
|
||
}
|
||
</code></pre>
|
||
<h3 id="switch"><a class="header" href="#switch">Switch</a></h3>
|
||
<pre><code>$x = 0;
|
||
switch ($x) {
|
||
case '0':
|
||
print "it's zero";
|
||
break;
|
||
case 'two':
|
||
case 'three':
|
||
// do something
|
||
break;
|
||
default:
|
||
// do something
|
||
}
|
||
</code></pre>
|
||
<h3 id="ternary-operator"><a class="header" href="#ternary-operator">Ternary operator</a></h3>
|
||
<pre><code># => Does
|
||
print (false ? 'Not' : 'Does');
|
||
$x = false;
|
||
# => Does
|
||
print($x ?: 'Does');
|
||
$a = null;
|
||
$b = 'Does print';
|
||
# => a is unset
|
||
echo $a ?? 'a is unset';
|
||
# => print
|
||
echo $b ?? 'b is unset';
|
||
</code></pre>
|
||
<h3 id="match"><a class="header" href="#match">Match</a></h3>
|
||
<pre><code>$statusCode = 500;
|
||
$message = match($statusCode) {
|
||
200, 300 => null,
|
||
400 => 'not found',
|
||
500 => 'server error',
|
||
default => 'known status code',
|
||
};
|
||
echo $message; # => server error
|
||
</code></pre>
|
||
<p>See: <a href="https://www.php.net/manual/en/control-structures.match.php">Match</a></p>
|
||
<h3 id="match-expressions"><a class="header" href="#match-expressions">Match expressions</a></h3>
|
||
<pre><code>$age = 23;
|
||
$result = match (true) {
|
||
$age >= 65 => 'senior',
|
||
$age >= 25 => 'adult',
|
||
$age >= 18 => 'young adult',
|
||
default => 'kid',
|
||
};
|
||
echo $result; # => young adult
|
||
</code></pre>
|
||
<h2 id="php-loops"><a class="header" href="#php-loops"><a href="https://quickref.me/php#php-loops">#</a>PHP Loops</a></h2>
|
||
<h3 id="while"><a class="header" href="#while">while</a></h3>
|
||
<pre><code>$i = 1;
|
||
# => 12345
|
||
while ($i <= 5) {
|
||
echo $i++;
|
||
}
|
||
</code></pre>
|
||
<h3 id="do-while"><a class="header" href="#do-while">do while</a></h3>
|
||
<pre><code>$i = 1;
|
||
# => 12345
|
||
do {
|
||
echo $i++;
|
||
} while ($i <= 5);
|
||
</code></pre>
|
||
<h3 id="for-i"><a class="header" href="#for-i">for i</a></h3>
|
||
<pre><code># => 12345
|
||
for ($i = 1; $i <= 5; $i++) {
|
||
echo $i;
|
||
}
|
||
</code></pre>
|
||
<h3 id="break"><a class="header" href="#break">break</a></h3>
|
||
<pre><code># => 123
|
||
for ($i = 1; $i <= 5; $i++) {
|
||
if ($i === 4) {
|
||
break;
|
||
}
|
||
echo $i;
|
||
}
|
||
</code></pre>
|
||
<h3 id="continue"><a class="header" href="#continue">continue</a></h3>
|
||
<pre><code># => 1235
|
||
for ($i = 1; $i <= 5; $i++) {
|
||
if ($i === 4) {
|
||
continue;
|
||
}
|
||
echo $i;
|
||
}
|
||
</code></pre>
|
||
<h3 id="foreach"><a class="header" href="#foreach">foreach</a></h3>
|
||
<pre><code>$a = ['foo' => 1, 'bar' => 2];
|
||
# => 12
|
||
foreach ($a as $k) {
|
||
echo $k;
|
||
}
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/php#php-value-iteration">Array iteration</a></p>
|
||
<h2 id="php-functions"><a class="header" href="#php-functions"><a href="https://quickref.me/php#php-functions">#</a>PHP Functions</a></h2>
|
||
<h3 id="returning-values"><a class="header" href="#returning-values">Returning values</a></h3>
|
||
<pre><code>function square($x)
|
||
{
|
||
return $x * $x;
|
||
}
|
||
echo square(4); # => 16
|
||
</code></pre>
|
||
<h3 id="return-types"><a class="header" href="#return-types">Return types</a></h3>
|
||
<pre><code>// Basic return type declaration
|
||
function sum($a, $b): float {/*...*/}
|
||
function get_item(): string {/*...*/}
|
||
class C {}
|
||
// Returning an object
|
||
function getC(): C { return new C; }
|
||
</code></pre>
|
||
<h3 id="nullable-return-types"><a class="header" href="#nullable-return-types">Nullable return types</a></h3>
|
||
<pre><code>// Available in PHP 7.1
|
||
function nullOrString(int $v) : ?string
|
||
{
|
||
return $v % 2 ? "odd" : null;
|
||
}
|
||
echo nullOrString(3); # => odd
|
||
var_dump(nullOrString(4)); # => NULL
|
||
</code></pre>
|
||
<p>See: <a href="https://www.php.net/manual/en/migration71.new-features.php">Nullable types</a></p>
|
||
<h3 id="void-functions"><a class="header" href="#void-functions">Void functions</a></h3>
|
||
<pre><code>// Available in PHP 7.1
|
||
function voidFunction(): void
|
||
{
|
||
echo 'Hello';
|
||
return;
|
||
}
|
||
voidFunction(); # => Hello
|
||
</code></pre>
|
||
<h3 id="variable-functions"><a class="header" href="#variable-functions">Variable functions</a></h3>
|
||
<pre><code>function bar($arg = '')
|
||
{
|
||
echo "In bar(); arg: '$arg'.\n";
|
||
}
|
||
$func = 'bar';
|
||
$func('test'); # => In bar(); arg: test
|
||
</code></pre>
|
||
<h3 id="anonymous-functions"><a class="header" href="#anonymous-functions">Anonymous functions</a></h3>
|
||
<pre><code>$greet = function($name)
|
||
{
|
||
printf("Hello %s\r\n", $name);
|
||
};
|
||
$greet('World'); # => Hello World
|
||
$greet('PHP'); # => Hello PHP
|
||
</code></pre>
|
||
<h3 id="recursive-functions"><a class="header" href="#recursive-functions">Recursive functions</a></h3>
|
||
<pre><code>function recursion($x)
|
||
{
|
||
if ($x < 5) {
|
||
echo "$x";
|
||
recursion($x + 1);
|
||
}
|
||
}
|
||
recursion(1); # => 1234
|
||
</code></pre>
|
||
<h3 id="default-parameters"><a class="header" href="#default-parameters">Default parameters</a></h3>
|
||
<pre><code>function coffee($type = "cappuccino")
|
||
{
|
||
return "Making a cup of $type.\n";
|
||
}
|
||
# => Making a cup of cappuccino.
|
||
echo coffee();
|
||
# => Making a cup of .
|
||
echo coffee(null);
|
||
# => Making a cup of espresso.
|
||
echo coffee("espresso");
|
||
</code></pre>
|
||
<h3 id="arrow-functions"><a class="header" href="#arrow-functions">Arrow Functions</a></h3>
|
||
<pre><code>$y = 1;
|
||
$fn1 = fn($x) => $x + $y;
|
||
// equivalent to using $y by value:
|
||
$fn2 = function ($x) use ($y) {
|
||
return $x + $y;
|
||
};
|
||
echo $fn1(5); # => 6
|
||
echo $fn2(5); # => 6
|
||
</code></pre>
|
||
<h2 id="php-classes"><a class="header" href="#php-classes"><a href="https://quickref.me/php#php-classes">#</a>PHP Classes</a></h2>
|
||
<h3 id="constructor"><a class="header" href="#constructor">Constructor</a></h3>
|
||
<pre><code>class Student {
|
||
public function __construct($name) {
|
||
$this->name = $name;
|
||
}
|
||
public function print() {
|
||
echo "Name: " . $this->name;
|
||
}
|
||
}
|
||
$alex = new Student("Alex");
|
||
$alex->print(); # => Name: Alex
|
||
</code></pre>
|
||
<h3 id="inheritance"><a class="header" href="#inheritance">Inheritance</a></h3>
|
||
<pre><code>class ExtendClass extends SimpleClass
|
||
{
|
||
// Redefine the parent method
|
||
function displayVar()
|
||
{
|
||
echo "Extending class\n";
|
||
parent::displayVar();
|
||
}
|
||
}
|
||
$extended = new ExtendClass();
|
||
$extended->displayVar();
|
||
</code></pre>
|
||
<h3 id="classes-variables"><a class="header" href="#classes-variables">Classes variables</a></h3>
|
||
<pre><code>class MyClass
|
||
{
|
||
const MY_CONST = 'value';
|
||
static $staticVar = 'static';
|
||
// Visibility
|
||
public static $var1 = 'pubs';
|
||
// Class only
|
||
private static $var2 = 'pris';
|
||
// The class and subclasses
|
||
protected static $var3 = 'pros';
|
||
// The class and subclasses
|
||
protected $var6 = 'pro';
|
||
// The class only
|
||
private $var7 = 'pri';
|
||
}
|
||
</code></pre>
|
||
<p>Access statically</p>
|
||
<pre><code>echo MyClass::MY_CONST; # => value
|
||
echo MyClass::$staticVar; # => static
|
||
</code></pre>
|
||
<h3 id="magic-methods"><a class="header" href="#magic-methods">Magic Methods</a></h3>
|
||
<pre><code>class MyClass
|
||
{
|
||
// Object is treated as a String
|
||
public function __toString()
|
||
{
|
||
return $property;
|
||
}
|
||
// opposite to __construct()
|
||
public function __destruct()
|
||
{
|
||
print "Destroying";
|
||
}
|
||
}
|
||
</code></pre>
|
||
<h3 id="interface"><a class="header" href="#interface">Interface</a></h3>
|
||
<pre><code>interface Foo
|
||
{
|
||
public function doSomething();
|
||
}
|
||
interface Bar
|
||
{
|
||
public function doSomethingElse();
|
||
}
|
||
class Cls implements Foo, Bar
|
||
{
|
||
public function doSomething() {}
|
||
public function doSomethingElse() {}
|
||
}
|
||
</code></pre>
|
||
<h2 id="miscellaneous"><a class="header" href="#miscellaneous"><a href="https://quickref.me/php#miscellaneous">#</a>Miscellaneous</a></h2>
|
||
<h3 id="basic-error-handling"><a class="header" href="#basic-error-handling">Basic error handling</a></h3>
|
||
<pre><code>try {
|
||
// Do something
|
||
} catch (Exception $e) {
|
||
// Handle exception
|
||
} finally {
|
||
echo "Always print!";
|
||
}
|
||
</code></pre>
|
||
<h3 id="exception-in-php-80"><a class="header" href="#exception-in-php-80">Exception in PHP 8.0</a></h3>
|
||
<pre><code>$nullableValue = null;
|
||
try {
|
||
$value = $nullableValue ?? throw new InvalidArgumentException();
|
||
} catch (InvalidArgumentException) { // Variable is optional
|
||
// Handle my exception
|
||
echo "print me!";
|
||
}
|
||
</code></pre>
|
||
<h3 id="custom-exception"><a class="header" href="#custom-exception">Custom exception</a></h3>
|
||
<pre><code>class MyException extends Exception {
|
||
// do something
|
||
}
|
||
</code></pre>
|
||
<p>Usage</p>
|
||
<pre><code>try {
|
||
$condition = true;
|
||
if ($condition) {
|
||
throw new MyException('bala');
|
||
}
|
||
} catch (MyException $e) {
|
||
// Handle my exception
|
||
}
|
||
</code></pre>
|
||
<h3 id="nullsafe-operator"><a class="header" href="#nullsafe-operator">Nullsafe Operator</a></h3>
|
||
<pre><code>// As of PHP 8.0.0, this line:
|
||
$result = $repo?->getUser(5)?->name;
|
||
// Equivalent to the following code:
|
||
if (is_null($repo)) {
|
||
$result = null;
|
||
} else {
|
||
$user = $repository->getUser(5);
|
||
if (is_null($user)) {
|
||
$result = null;
|
||
} else {
|
||
$result = $user->name;
|
||
}
|
||
}
|
||
</code></pre>
|
||
<p>See also: <a href="https://wiki.php.net/rfc/nullsafe_operator">Nullsafe Operator</a></p>
|
||
<h3 id="regular-expressions"><a class="header" href="#regular-expressions">Regular expressions</a></h3>
|
||
<pre><code>$str = "Visit Quickref.me";
|
||
echo preg_match("/qu/i", $str); # => 1
|
||
</code></pre>
|
||
<p>See: <a href="https://quickref.me/regex#regex-in-php">Regex in PHP</a></p>
|
||
<h3 id="fopen-mode"><a class="header" href="#fopen-mode">fopen() mode</a></h3>
|
||
<div class="table-wrapper"><table><thead><tr><th><code>r</code></th><th>Read</th></tr></thead><tbody>
|
||
<tr><td><code>r+</code></td><td>Read and write, prepend</td></tr>
|
||
<tr><td><code>w</code></td><td>Write, truncate</td></tr>
|
||
<tr><td><code>w+</code></td><td>Read and write, truncate</td></tr>
|
||
<tr><td><code>a</code></td><td>Write, append</td></tr>
|
||
<tr><td><code>a+</code></td><td>Read and write, append</td></tr>
|
||
</tbody></table>
|
||
</div>
|
||
<h3 id="runtime-defined-constants"><a class="header" href="#runtime-defined-constants">Runtime defined Constants</a></h3>
|
||
<pre><code>define("CURRENT_DATE", date('Y-m-d'));
|
||
// One possible representation
|
||
echo CURRENT_DATE; # => 2021-01-05
|
||
# => CURRENT_DATE is: 2021-01-05
|
||
echo 'CURRENT_DATE is: ' . CURRENT_DATE;
|
||
</code></pre>
|
||
|
||
</main>
|
||
|
||
<nav class="nav-wrapper" aria-label="Page navigation">
|
||
<!-- Mobile navigation buttons -->
|
||
<a rel="prev" href="../../posts/php/for_php_string_implment_some_extemtion_functions.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
||
<i class="fa fa-angle-left"></i>
|
||
</a>
|
||
|
||
<a rel="next prefetch" href="../../posts/leetcode/leetcode.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
||
<i class="fa fa-angle-right"></i>
|
||
</a>
|
||
|
||
<div style="clear: both"></div>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
<nav class="nav-wide-wrapper" aria-label="Page navigation">
|
||
<a rel="prev" href="../../posts/php/for_php_string_implment_some_extemtion_functions.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
||
<i class="fa fa-angle-left"></i>
|
||
</a>
|
||
|
||
<a rel="next prefetch" href="../../posts/leetcode/leetcode.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
||
<i class="fa fa-angle-right"></i>
|
||
</a>
|
||
</nav>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script>
|
||
window.playground_line_numbers = true;
|
||
</script>
|
||
|
||
<script>
|
||
window.playground_copyable = true;
|
||
</script>
|
||
|
||
<script src="../../ace.js"></script>
|
||
<script src="../../editor.js"></script>
|
||
<script src="../../mode-rust.js"></script>
|
||
<script src="../../theme-dawn.js"></script>
|
||
<script src="../../theme-tomorrow_night.js"></script>
|
||
|
||
<script src="../../elasticlunr.min.js"></script>
|
||
<script src="../../mark.min.js"></script>
|
||
<script src="../../searcher.js"></script>
|
||
|
||
<script src="../../clipboard.min.js"></script>
|
||
<script src="../../highlight.js"></script>
|
||
<script src="../../book.js"></script>
|
||
|
||
<!-- Custom JS scripts -->
|
||
<script src="../../src/js/custom.js"></script>
|
||
|
||
|
||
</div>
|
||
</body>
|
||
</html>
|