PHP класс — сделать крошечную обертку

В настоящее время я делаю плагин класса для системы, подобной посту.

Тем не менее, я хотел бы сделать своего рода оболочку класса, чтобы использовать ее в качестве простой функции. Но мне нужно зарегистрировать в моем классе некоторые сценарии и константы, а затем запустить класс.

С текущей оберткой я заставил ее повторно выполнить функцию _contruct класса. Я хочу инициализировать класс, тогда, когда я вызову крошечную оболочку, он не будет выполнять экземпляр contrucct и получит только правильную функцию класса.

Как я могу сделать это? Имеет ли это смысл?

Вот мой пример кода:

if(!class_exists('Post_Like')) {

class Post_Like {

static private $instance = null;

static public function getInstance() {
if(self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}

public function __construct() {
$this->define_constants();
// Load public/admin CSS and JS.
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'));
// register actions for ajax
add_action( 'wp_ajax_nopriv_post_like', array($this, 'post_like') );
add_action( 'wp_ajax_post_like', array($this, 'post_like') );
}

public function define_constants() {
define('POST_LIKE_PATH', trailingslashit(str_replace('\\', '/', dirname(__FILE__))));
define('POST_LIKE_URL', site_url(str_replace(trailingslashit(str_replace('\\', '/',ABSPATH)), '', POST_LIKE_PATH)));
}


public function enqueue_scripts() {
// enqueue js scripts
}

public function post_like() {
// do some stuff
}


public function post_already_like() {
// do some stuff
}

// I want to wrap this function to use it anywhere easily
public function get_post_like() {
// do some stuff
}

}

}

new Post_Like();

if(!function_exists('Post_Like')) {
/**
* Tiny wrapper function
*/
function get_post_like() {
$Post_Like = Post_Like::getInstance();
return $Post_Like->get_post_like(); // it execute _contruct, I want to avoid that
}

}

0

Решение

По телефону new Post_Like(); вы создаете экземпляр класса, выполняя конструктор.

Если вы хотите избежать этого, и, поскольку вы определили это как одиночный, вы можете сделать этот конструктор приватным.

Попробуйте следующее:

if(!class_exists('Post_Like')) {

class Post_Like {

static private $instance = null;

static public function getInstance() {
if(self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}

private function __construct() {
$this->define_constants();
// Load public/admin CSS and JS.
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'));
// register actions for ajax
add_action( 'wp_ajax_nopriv_post_like', array($this, 'post_like') );
add_action( 'wp_ajax_post_like', array($this, 'post_like') );
}

public function define_constants() {
define('POST_LIKE_PATH', trailingslashit(str_replace('\\', '/', dirname(__FILE__))));
define('POST_LIKE_URL', site_url(str_replace(trailingslashit(str_replace('\\', '/',ABSPATH)), '', POST_LIKE_PATH)));
}


public function enqueue_scripts() {
// enqueue js scripts
}

public function post_like() {
// do some stuff
}


public function post_already_like() {
// do some stuff
}

// I want to wrap this function to use it anywhere easily
public function get_post_like() {
// do some stuff
}

}

}

// new Post_Like(); <-- unnecessary

// you need to check for a function called 'get_post_like' rather than the class name
if(!function_exists('get_post_like')) {
function get_post_like() {
return Post_Like::getInstance()->get_post_like();
}

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]