Namespace được sử dụng nhằm tạo ra định danh mới cho class nhằm tránh tình trạng trùng class. Vậy cách sử dụng như thế nào?. Mình sẽ chia sẽ cách sử dụng
Nói chung bạn có thể đặt tên theo ý của bạn, chỉ lưu ý là nó sẽ ở trên cùng của một file php
Mình thì sẽ đặt tên như sau ví dụ: namespace Myprocore\Includes\Classes;
Myprocore\Includes\Classes chính là path tới file class, để mình biết vị trí file class lưu ở đâu
Thường để chạy class bạn thường dùng cú pháp là “new tên_class”, nhưng khi bạn đã dùng namespace để định danh cho class hiện tại thì việc new class có chút khác biệt, mình sẽ ví dụ code để bạn hiểu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php namespace Myprocore\Includes\Classes; // File Security Check if ( ! defined( 'ABSPATH' ) ) { exit; } //dùng use tên_namespace\tên_class use Myprocore\Includes\Classes\Import_Landing_Page_Template; class Import_Landing_Page_Template{ function __construct(){ } } new Import_Landing_Page_Template(); |
Bạn chỉ cần dùng use là ok, cũng có một cách khác nữa new Myprocore\Includes\Classes\Import_Landing_Page_Template(), nhưng cách này mình thấy không ok lắm
Dả dụ trong một function của class dùng namespace, chúng ta new một class không namespace dùng cú pháp new tên_class() thì chắc chắn chương trình sẽ lỗi và cú pháp sẽ là new \ten_class(). Mình ví dụ code sau
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php namespace Myprocore\Includes\Classes; // File Security Check if ( ! defined( 'ABSPATH' ) ) { exit; } //dùng use tên_namespace\tên_class use Myprocore\Includes\Classes\Import_Landing_Page_Template; class Import_Landing_Page_Template{ function __construct(){ } function import_menus_landing_page(){ $check_imported = get_option("menus_landing_page_imported"); if(!$check_imported){ //import content require ( MYPROCORE_INCLUDES_DIR. '/xml-import/mrtung-importer.php' ); $import_obj = new \Mrtung_Importer(); $import_obj->import(MYPROCORE_DATA_DIR. 'menus-landingpage.xml'); update_option("menus_landing_page_imported",1); } } } new Import_Landing_Page_Template(); |
Trong function import_menus_landing_page bạn thấy mình new một class $import_obj = new \Mrtung_Importer(); , nó hơi khác là dùng thêm dấu “\”
Thì cũng dùng new ten_class chỉ khách một chút là trước khi khởi tạo ngoài việc include tới file chứa class chúng ta sử dụng use. sau đây là code ví dụ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php namespace Myprocore\Includes\Classes; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } // If plugin - 'Elementor' not exist then return. if ( ! class_exists( '\Elementor\Plugin' ) ) { return; } use Elementor\Core\Base\Document; use Elementor\Core\Editor\Editor; use Elementor\DB; use Elementor\Core\Settings\Manager as SettingsManager; use Elementor\Core\Settings\Page\Model; use Elementor\Modules\Library\Documents\Library_Document; use Elementor\Plugin; use Elementor\Utils; use Myprocore\Includes\Classes\Import_Landing_Page_Template; use Myprocore\Includes\Classes\Etk_Import_Wpforms; class Etk_Import_Wpforms extends Source_Local { function import($xml_path,$list_pages_wpforms){ // dùng function kế thừa $data = $this->process_export_import_content( $data, 'on_import' ); //gọi một function nằm trong class static Plugin::$instance->posts_css_manager->clear_cache(); $Import_Landing_Page_Template = new Import_Landing_Page_Template(); $Import_Landing_Page_Template->import_menus_landing_page(); } } |
Ở ví dụ trên anh chị thì mình dùng use (lưu ý trước khi dùng use thì mình đã include tới file php chứa class)
use Elementor\Core\Base\Document;
use Elementor\Core\Editor\Editor;
use Elementor\DB;
use Elementor\Core\Settings\Manager as SettingsManager;
use Elementor\Core\Settings\Page\Model;
use Elementor\Modules\Library\Documents\Library_Document;
use Elementor\Plugin;
use Elementor\Utils;
use Myprocore\Includes\Classes\Import_Landing_Page_Template;
Sau khi dùng use thì chúng ta có thể extends (kế thừa lớp), khởi tạo như bình thường
// dùng function kế thừa
$data = $this->process_export_import_content( $data, ‘on_import’ );
//gọi tới function nằm trong class static và function nằm trong nó
Plugin::$instance->posts_css_manager->clear_cache();
//new class và gọi function như bình thường
$Import_Landing_Page_Template = new Import_Landing_Page_Template();
$Import_Landing_Page_Template->import_menus_landing_page();
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress