Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日韩国产有码在线观看视频,无码专区aaaaaa免费视频,成人在线激情

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          WordPress 代碼要這么寫才規范,5000多字的編碼規范吐血整理

          ordPress 的 PHP 編碼標準對整個 WordPress 社區都適用,但是對于 WordPress 核心代碼是強制要求的,而對于主題和插件,WordPress 則鼓勵使用,因為主題和插件的作者可能會選擇遵循別的編碼風格。

          但這個編碼規范不僅關于編碼風格,還包括 WordPress 生態中互操作性、可翻譯性和安全性等方面的最佳實踐,因此即使使用其他的編碼風格 ,還是建議開發者在最佳實踐方面仍然遵守 WordPress 編碼標準。

          目前也不是所有的核心代碼都完全符合這個規范,但所有新提交和/或更新的代碼則都要求完全遵守。

          對于開發者來說,如果想根據這個規范去自動檢查自己的代碼,可以使用基于 PHP_CodeSniffer 開發的官方 WordPress 編碼規范工具。

          引號

          正確的使用單引號和雙引號,如果字符串中不包含變量的時候,則使用單引號,永遠不要在字符串中轉移引號,而是通過切換引號類型,比如:

          echo '<a href="/static/link" title="Yeah yeah!">Link name</a>';
          echo "<a href='$link' title='$linktitle'>$linkname</a>";

          HTML 或 XML 屬性中的文本應該進行轉義,以便單引號或者雙引號不會結束屬性使得 HTML 標簽無效,甚至引起安全問題,如何對屬性進行轉義,我們會在以后的文章中詳細講解。

          縮進

          首先使用制表符而不是空格進行縮進,并且使用空格把代碼對齊,以便更易閱讀:

          [tab]$foo   = 'somevalue';
          [tab]$foo2  = 'somevalue2';
          [tab]$foo34 = 'somevalue3';
          [tab]$foo5  = 'somevalue4';

          對于關聯數組,如果數據含有多個元素的時候,每個元素都應該新起一行:

          $query = new WP_Query( array( 'ID' => 123 ) );
          $args = array(
          [tab]'post_type'   => 'page',
          [tab]'post_author' => 123,
          [tab]'post_status' => 'publish',
          );
           
          $query = new WP_Query( $args );

          特別關注一下數組最后一個元素后面的逗號,推薦都加上,因為這樣更容易調整數組的順序,并且更容易添加新的元素,因為不用關注之前最后一個是否有逗號。

          對于 switch 結構, case 語句應該比 switch 語句多縮進一個制表符, case 的內容也要比 case 條件語句縮進一個 tab。

          switch ( $type ) {
          [tab]case 'foo':
          [tab][tab]some_function();
          [tab][tab]break;
          [tab]case 'bar':
          [tab][tab]some_function();
          [tab][tab]break;
          }

          經驗法則:行首縮進使用制表符,行中對齊使用空格。

          大括號

          大括號的使用樣式如下所示:

          if ( condition ) {
              action1();
              action2();
          } elseif ( condition2 && condition3 ) {
              action3();
              action4();
          } else {
              defaultaction();
          }

          如果代碼塊非常長,那就要考慮將其分解成更多的較短的代碼塊,函數或者方法,以便降低復雜度,提高測試的便利性,當然也增加了代碼的可讀性。

          不管是否必需,都要使用大括號:

          if ( condition ) {
              action0();
          }
           
          if ( condition ) {
              action1();
          } elseif ( condition2 ) {
              action2a();
              action2b();
          }
           
          foreach ( $items as $item ) {
              process_item( $item );
          }

          特別注意,強制使用大括號意味著禁止單語句內聯控制結構,但是可以使用控制結構的替代語法(例如 if/endif, while/endwhile)——尤其是在 HTML 的模板中嵌入 PHP 代碼的時候 ,例如:

          <?php if ( have_posts() ) : ?>
              <div class="hfeed">
                  <?php while ( have_posts() ) : the_post(); ?>
                      <article id="post-<?php the_ID() ?>" class="<?php post_class() ?>">
                          <!-- ... -->
                      </article>
                  <?php endwhile; ?>
              </div>
          <?php endif; ?>

          使用 elseif 而不是 else if

          因為 else ifif|elseif 代碼塊的冒號語法不兼容,因此條件語句中使用 elseif。

          數組聲明

          使用長數組語法 ( array( 1, 2, 3 ) ) 聲明數組通常比短數組語法 ( [ 1, 2, 3 ] ) 更具有可讀性,對于初學者,也更有描述性。

          所以數組聲明必須使用長數組語法。

          閉包(匿名函數)

          在一些的情況下(比如回調函數只需要用一次),可以使用閉包而非重寫一個新函數來作為回調函數傳遞,比如:

          $caption = preg_replace_callback(
              '/<[a-zA-Z0-9]+(?: [^<>]+>)*/',
              function ( $matches ) {
                  return preg_replace( '/[\r\n\t]+/', ' ', $matches[0] );
              },
              $caption
          );

          但是不建議 filter 或 action 的回調函數使用閉包,因為通過 remove_action() / remove_filter() 移除的時候,就變得復雜了。

          函數多行調用

          將一個函數調用拆分為多行時,每個參數必須位于單獨的行上, 單行內聯注釋可以單獨一行:

          每個參數不得超過一行,如果一個參數需要多行,那么可以先將其賦值給一個變量,然后再將該變量傳遞給函數調用。

          $bar = array(
              'use_this' => true,
              'meta_key' => 'field_name',
          );
          $baz = sprintf(
              /* translators: %s: Friend's name */
              esc_html__( 'Hello, %s!', 'yourtextdomain' ),
              $friend_name
          );
           
          $a = foo(
              $bar,
              $baz,
              /* translators: %s: cat */
              sprintf( __( 'The best pet is a %s.' ), 'cat' )
          );

          正則表達式

          正則表達式應該使用 Perl 兼容的正則表達式(PCRE, preg_函數),另外永遠不要使用 /e 開關,而是使用 preg_replace_callback

          在正則表達式中使用單引號字符串是最簡便的,因為相比雙引號,單引號字符串只有兩個元序列需要轉移:\'\。

          PHP 開始和結束標記

          在 HTML 模板中如果要嵌入多行 PHP 代碼時,PHP 開始和結束標記都要自己單獨一行。

          正確(多行):

          function foo() {
              ?>
              <div>
                  <?php
                  echo bar(
                      $baz,
                      $bat
                  );
                  ?>
              </div>
              <?php
          }

          正確(單行):

          <input name="<?php echo esc_attr( $name ); ?>" />

          錯誤:

          if ( $a === $b ) { ?><some html><?php }

          不要使用簡寫的 PHP 標記

          重要:永遠不要使用簡寫的 PHP 標記,使用完整版。

          正確:

          <?php ... ?>
          <?php echo $var; ?>

          錯誤:

          <? ... ?>
          <?= $var ?>

          刪除行尾的空格

          刪除每行末尾的空格,最好在文件末尾省略 PHP 結束標記,如果沒有省略,那就確保刪除 PHP 結束標記后面的空格。

          空格的用法

          始終在逗號后放置空格,并在邏輯運算符、比較運算符、字符串連接符和賦值運算符的兩側放置空格。

          x === 23
          foo && bar
          ! foo
          array( 1, 2, 3 )
          $baz . '-5'
          $term .= 'X'

          在控制語句中的左括號和右括號的兩側放置空格:

          foreach ( $foo as $bar ) { ...

          定義函數時,這樣使用空格:

          function my_function( $param1 = 'foo', $param2 = 'bar' ) { ...
          function my_other_function() { ...

          調用函數時:

          my_function( $param1, func_param( $param2 ) );
          my_other_function();

          當執行邏輯運算時:

          if ( ! $foo ) { ...

          類型轉換必須使用小寫的, 并且使用簡短形式,(int) 而不是 (integer) ,(bool) 而不是 (boolean),對于浮點類型轉換,請使用 (float) 而不是 (real),因為 (real) 在 PHP 7.4 已被棄用,并在 PHP 8 被移除。

          foreach ( (array) $foo as $bar ) { ...
          $foo = (bool) $bar;

          當涉及到數組元素的時候,僅當元素的索引是變量的時候,在索引周圍包含空格,例如:

          $x = $foo['bar']; // 正確
          $x = $foo[ 'bar' ]; // 錯誤
           
          $x = $foo[0]; // 正確
          $x = $foo[ 0 ]; // 錯誤
           
          $x = $foo[ $bar ]; // 正確
          $x = $foo[$bar]; // 錯誤

          switch 代碼中, case 提交和冒號之間不要有空格:

          switch ( $foo ) {
              case 'bar': // 正確
              case 'ba' : // 錯誤
          }

          同樣,返回的類型聲明的冒號前不應有空格:

          function sum( $a, $b ): float {
              return $a + $b;
          }

          除非另有說明,括號內應有空格。

          if ( $foo && ( $bar || $baz ) ) { ...
          my_function( ( $x - 1 ) * 5, $y );

          格式化 SQL 語句

          在格式化 SQL 語句時,如果 SQL 很復雜,可以將 SQL 語句分成幾行并縮進。當然大部分 SQL 語句一行就可以了。然后將 SQL 語句中的關鍵字(比如 UPDATE 或者 WHERE)大寫。

          需要更新數據庫的函數的參數,傳遞來之前應該沒有對數據進行 SQL 斜杠轉義,轉義應該盡可能接近查詢的時候執行,并且最好使用 $wpdb->prepare() 進行。

          $wpdb->prepare() 是一種處理 SQL 查詢的轉義、引用和整數轉換的方法。它使用 sprintf() 格式的子集。例子 :

          $wpdb->prepare() 是用來對 SQL 查詢進行轉義、引用和整數轉換等操作的方法,它 sprintf() 的一部分格式化方法,比如:

          $var = "dangerous'"; // 可能未轉義的原始數據
          $id = some_foo_number(); // 期待是整形的數據,但是不能確定
           
          $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id ) );

          %s 用于字符串占位符,而 %d 用于整數占位符。注意他們沒有被引用,$wpdb->prepare() 會執行轉義和引用的工作。

          數據庫查詢

          避免直接操作數據庫,如果有定義的函數可以獲取你需要的數據,則使用它。數據庫抽象(使用函數而不是查詢)有助于保持代碼向前兼容,并且在查詢結果被緩存到內存中的時候,它可以快很多倍。

          命名約定

          在變量名,action/filter 的名稱和函數名使用小寫,不要使用駝峰式,通過下劃線分割單詞, 如非必需不要使用縮寫,讓代碼無歧義并能自我說明:

          function some_name( $some_variable ) { [...] }

          類名必須首字母大寫,并用下劃線分割,首字母縮寫詞都應全部大寫:

          class Walker_Category extends Walker { [...] }
          class WP_HTTP { [...] }

          常量必須全部大寫,并用下劃線分割

          define( 'DOING_AJAX', true );

          文件名應使用小寫字母進行描述性命名,使用連字符應分隔:

          my-plugin-name.php

          類文件名應該基于類名,然后在前面加上 class-,然后類名中的下劃線替換為連字符,例如 WP_Error 的文件名:

          class-wp-error.php

          wp-includes 目錄中含有函數模板標簽函數的文件,都會在文件名稱末尾附加 -template 以便它們顯而易見。

          general-template.php

          每個文件只有一個對象結構(類/接口/特征)

          比如,有個名為 class-example-class.php 的文件,它只包含一個類:

          // 錯誤: 文件 class-example-class.php
          class Example_Class { [...] }
          class Example_Class_Extended { [...] }

          第二個類應該在自己的名字為 class-example-class-extended.php 的文件中:

          // 正確:文件 class-example-class-extended.php.
          class Example_Class_Extended { [...] }
          // 正確:文件 class-example-class-extended.php.
          class Example_Class_Extended { [...] }

          函數參數的自解釋標志值

          調用函數時使用字符串值而不是 truefalse

          // 錯誤
          function eat( $what, $slowly = true ) {
          ...
          }
          eat( 'mushrooms' );
          eat( 'mushrooms', true ); // true 是什么意思呢?
          eat( 'dogfood', false ); // false 又是什么意思呢?false 的反面?

          PHP 直到 8.0 起,才支持命名參數,但是,由于 WordPress 目前仍支持較舊的 PHP 版本,我們還不能使用這些版本。

          沒有命名參數,標志的值是沒有意義的,每次遇到像上面例子這樣的函數調用時,我們都必須搜索函數定義才明白什么意思。通過使用描述性字符串值而不是布爾值,可以使代碼更具可讀性。

          // 正確
          function eat( $what, $speed = 'slowly' ) {
          ...
          }
          eat( 'mushrooms' );
          eat( 'mushrooms', 'slowly' );
          eat( 'dogfood', 'quickly' );

          當需要使用更多詞匯來描述函數參數時,$args 數組參數可能是更好的模式:

          // 更好
          function eat( $what, $args ) {
          ...
          }
          eat ( 'noodles', array( 'speed' => 'moderate' ) );

          動態 Hook 的插值命名

          出于可讀性和可發現性的目的,應使用插值而不是串聯來命名動態 Hook。

          動態 Hook 是在其標簽名中包含動態值的 Hook,例如 {$new_status}_{$post->post_type}(publish_post)。

          HooK 標簽中使用的變量應該用大括號 { 和 } 括起來,完整的外部標簽名稱用雙引號括起來。這是為了確保 PHP 可以正確解析內插字符串中給定的變量。

          do_action( "{$new_status}_{$post->post_type}", $post->ID, $post );

          可能的話,標簽名稱中的動態值也應盡可能簡潔明了,比如 $user_id 就比 $this->id 更加清晰明了。

          三元運算符

          使用三元運算符很好,但是盡量讓他們先測試為真,而不是假,否則容易混淆(一個例外是使用 ! empty(), 因為這里為假反而更直觀)。

          // (if statement is true) ? (do this) : (else, do this);
          $musictype = ( 'jazz' === $music ) ? 'cool' : 'blah';
          // (if field is not empty ) ? (do this) : (else, do this);

          尤達表達式

          if ( true === $the_force ) {
              $victorious = you_will( $be );
          }

          涉及變量的邏輯比較時,始終將變量放在右側,將常量、文字或函數調用放在左側。如果雙方都不是變量,則順序并不重要。(在計算機科學術語中,在比較中總是嘗試將 l 值放在右側,將 r 值放在左側。)

          在上面的例子中,如果省略了一個等號(承認吧,即使是我們當中最有經驗的人也會犯這種錯誤),你會得到一個解析錯誤,因為你不能賦值給一個像 true 這樣的常量,如果該語句是相反的( $the_force = true ),則賦值將完全有效,返回 1,導致 if 語句結果為 true,這種錯誤可能讓你花費很長時間去 Debug。

          尤達表達式適用于 ==, !=, ===, 和 !==。而 <, >, <= 或者 >= 情況不會出現賦值的可能,并且不易閱讀,不建議使用。

          “聰明”的代碼

          一般來說,代碼的可讀性比聰明和簡潔更重要:

          isset( $var) || $var= some_function();

          雖然上面的代碼很巧妙,但如果你不熟悉它,需要一段時間才能理解。所以還是這樣寫吧:

          if ( ! isset( $var ) ) {
              $var = some_function();
          }

          除非絕對的必要,否則不應使用松散的比較,因為可能會產生誤導。

          正確:

          if ( 0 === strpos( 'WordPress', 'foo' ) ) {
              echo __( 'Yay WordPress!' );
          }

          錯誤:

          if ( 0 == strpos( 'WordPress', 'foo' ) ) {
              echo __( 'Yay WordPress!' );}
          
          
          
          

          賦值最好不要在條件表達式中:

          正確:

          $data = $wpdb->get_var( '...' );
          if ( $data ) {
          
          
              // Use $data
          }

          錯誤:

          if ( $data = $wpdb->get_var( '...' ) ) {
              // Use $data
          }

          在 switch 語句中,可以將多個空的 case 放到一起。但是,如果一個 case 包含代碼,然后直接進入下一個代碼塊,則必須明確注釋。

          switch ( $foo ) {
              case 'bar':       // 正確,空的 case 無需注釋
              case 'baz':
                  echo $foo;    // 錯誤, 含有代碼的 case 必須 break,return 或者含有注釋
              case 'cat':
                  echo 'mouse';
                  break;        // 正確,有 break 的 case 無需注釋
              case 'dog':
                  echo 'horse';
                  // no break   // 正確,含有注釋的 case 可以不要 break。
              case 'fish':
                  echo 'bird';
                  break;
          }

          goto 語句絕對不能用。

          eval() 是非常危險并且無法確保安全。 create_function() 函數,相當于內部執行了內部執行 eval(),PHP 7.2 起已棄用,并已在 PHP 8.0 中刪除,所以都不能使用。

          錯誤控制符 @

          引用 PHP 文檔:

          PHP 支持一種錯誤控制運算符:at 符號 (@)。當附加到 PHP 中的表達式時,該表達式可能生成的任何診斷錯誤都將被抑制。

          雖然在 WordPress 核心代碼中確實存在此運算符,但它經常被懶惰地使用,而不是進行適當的錯誤檢查。強烈建議不要使用它,甚至 PHP 文檔也指出:

          警告:在 PHP 8.0.0 之前,@ 運算符可以禁用將終止腳本執行的嚴重錯誤。例如,將 @ 附加到不存在的函數調用之前,由于不可用或輸入錯誤,將導致腳本終止而沒有說明原因。

          不要使用 extract()

          extract() 是一個非常糟糕的函數,它使代碼更難調試和更難理解,我們應該不應該使用它,并刪除現有代碼中的所有使用。

          了美化網站,我在網站上面添加了一個HTML懸浮音樂播放器,先來看看一下效果圖。

          如何在自己的網站上添加HTML懸浮音樂播放器呢?今天和你們分享

          首先申明三點:

          1、本播放器實際上是調用網易云音樂的音樂進行播放,音樂版權歸網易云音樂所有,僅供個人學習研究,用于商用的后果自負!

          2、本播放器的演示效果可以在我的博客首頁看到,默認支持所有Html和PHP環境的網站。

          3、本播放器可以使用電腦、手機、IPAD等設備訪問,自適應。)


          具體的操作方法:

          在網站源文件中(如果有單獨的頁腳文件,也可以放在頁腳文件里面)添加這三行代碼:

          <!--音樂播放器-->

          <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.0/jquery.min.js"></script>

          <script src="https://myhkw.cn/player/js/player.js" id="myhk" key="demo" m="1"></script>


          然后保存發布,在瀏覽器刷新網頁就看到效果了

          TML+PHP超大視頻上傳實例,PHP批量上傳大文件技巧,PHP批量上傳大文件,PHP實現批量上傳圖片的技巧,PHP結合WEB UPLOADER插件實現分段,PHP結合WEB UPLOADER插件實現切片上傳,PHP結合WEB UPLOADER插件實現斷點續傳,PHP結合WEB UPLOADER插件實現大文件上傳,PHP結合UPLOADER插件實現分片上傳文件,PHP結合百度UPLOADER插件實現分片上傳文件,PHP結合WEB UPLOADER插件實現分片上傳文件,前端HTML5,JS,JQ,VUE2,VUE3,React,

          前端的話都有可能用到,VUE2,VUE3,HTML5,也不一定是VUE, 公司內部有自己的產品,有些產品是之前開發的,沒有用VUE,而是用的普通的HTML模板,用的也還好。

          后端PHP5,PHP6,PHP7,PHP8,ThinkPHP,

          客戶是武漢這邊的一家企業。

          webuploader的組件公司研發部的同事也調研過,研究過他的實現,實際上他就是對Flash和HTML5進行了一個封裝,本質還是調的HTML5的API,兼容性不是特別好??蓴U展性也比較差,可維護性就更不用說了,之前公司項目遇到過坑,到現在連webuploader開發人員都聯系不上。想找他們尋求一點技術支持的幫助,真的是想都不要想。公司這一塊也愿意付費,就是付費尋求的技術支持,也不行。這一點真的讓哥幾個給整郁悶了。領導也不太滿意,所以還是找有技術支持的產品。研發部的同事稱這些項目是免費坑人項目。

          服務器支持Linux,Windows,macOS,CentOS,中標麒麟,銀河麒麟,統信,龍芯,華為鯤鵬,

          數據庫支持MySQL,達夢數據庫,人大金倉

          需要提供前端源碼,后端源碼,控件源碼

          需要提供7*24小時技術支持,長期技術支持,長期維護服務

          需要提供手機,QQ,微信,企業微信,電子郵箱等聯系方式

          需要支持包含IE在內的全部瀏覽器

          終端需要支持Windows,macOS,Linux,信創國產化環境,中標麒麟,銀河麒麟,統信UOS,龍芯,華為

          功能需要支持10G,50G,100G大文件上傳和斷點續傳,刷新續傳,重啟續傳

          支持超大文件分片,分段,分塊,分割上傳下載,斷點續傳

          支持文件夾上傳,下載斷點續傳,支持文件夾層級結構,層級結構信息保存到數據庫,下載的時候同樣保留層級結構

          支持加密上傳,下載加密,端到端加密,國密SM4加密算法,數據加密傳輸,傳輸過程中要保證數據是加密的。

          版本:6.5.40

          代碼:https://gitee.com/xproer/up6-php/tree/6.5.40/

          安裝環境

          PHP:7.2.14

          調整塊大小

          NOSQL

          NOSQL不需要任何配置,可以直接訪問測試

          SQL

          創建數據庫

          您可以直接復制腳本進行創建

          配置數據庫連接

          6.安裝依賴

          訪問頁面進行測試

          數據表中的數據

          相關參考:

          文件保存位置

          php5教程,

          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl

          OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
          控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc


          主站蜘蛛池模板: 国产一区二区三区樱花动漫| 国产精品伦子一区二区三区| 亚洲欧美成人一区二区三区| 久久精品一区二区影院 | 一区二区三区www| 久久久一区二区三区| 丰满人妻一区二区三区视频| 成人区人妻精品一区二区三区| 久久国产精品无码一区二区三区| 日韩人妻无码一区二区三区| 午夜无码视频一区二区三区| 国产成人一区二区动漫精品 | 色国产在线视频一区| 亚洲一区在线观看视频| 无码精品人妻一区二区三区免费看| jazzjazz国产精品一区二区| 内射白浆一区二区在线观看| 无码国产精品一区二区高潮| 日韩精品福利视频一区二区三区| 亚洲AV无码一区二区三区牛牛| 无码乱码av天堂一区二区| 国产一区二区成人| 亚洲AV成人精品一区二区三区 | 99久久国产精品免费一区二区| 国产99精品一区二区三区免费| 日本夜爽爽一区二区三区| 精品一区二区三区在线观看l | 久久青草国产精品一区| 国产精品污WWW一区二区三区| 精品国产精品久久一区免费式| 亚洲av无码片vr一区二区三区| 极品尤物一区二区三区| 无码少妇A片一区二区三区| 国产麻豆剧果冻传媒一区| 无码人妻精品一区二区三区99不卡 | 精品少妇一区二区三区在线 | 国产区精品一区二区不卡中文| 日韩一区二区电影| 国产精品综合AV一区二区国产馆| 夜夜精品视频一区二区| 日亚毛片免费乱码不卡一区|