Ich mag würde zu, wenn eine Klasse instanziieren einen Namen zu übergeben können, die für voran einen Methodennamen in dieser Klasse verwendet werden soll, habe ich bisher in diesemDynamischer Methodenname innerhalb einer Klasse?
<?php
if (! class_exists('My_Class')) {
/**
* Creates filter method
*
* @since 1.0.0
*/
class My_Class {
/**
* Prefix for method names
*
* @var string $name Name of the filter prefix.
*/
private $name;
/**
* Version.
*
* @var string
*/
private $version = '1.0.0';
/**
* Initialize the class and set its properties.
*
* @since 1.0.0
* @param string $name The name for the method prefix.
* @param string $version The version of this plugin.
*/
public function __construct($name, $version) {
$this->name = $name;
$this->version = $version;
add_filter('my_filter_name', $name . '_my_folder');
}
/**
* Function for filtering folder array
*
* Each plugin has to set its own array of paths and url.
*
* @param array $import_array Array with folder values.
* @return array Modified array with folder values.
*/
public function $name . _my_folder() {
$import_array[$this->name]['folder'] = plugin_dir_path(__FILE__) . 'includes/layout';
$import_array[$this->name]['folder_url'] = plugin_dir_url(__FILE__) . 'includes/layout';
return $import_array;
}
}
}
Die Idee ist, dass ich würde es nur nennen wie
$first_object = new My_Class('first');
$second_object = new My_Class('second');
Dies ist so, dass ich das in mehreren gleichen Plugins verwenden kann, mit unterschiedlichen Namen, je nach Art des Plugins.
Das offensichtliche Problem ist function $name . _my_folder()
.
Ich lese etwas über __call()
magische Methode, aber ich bin mir nicht sicher, ob dies in diesem Fall verwendet werden kann, oder wie man es anwendet.
Kann dies getan werden?
Warum brauchen Sie das? Es ist absolut eine schlechte Idee, es so zu benutzen. Es scheint wie ein schlechtes OOP-Design. Bitte beschreiben Sie Ihren Anwendungsfall dafür. –
In WordPress können Sie Filter verwenden, um die Funktionsweise einer Funktion zu ändern, wenn sie die Funktion "apply_filters" enthält. Ich muss in der Lage sein, an vorhandene Array, Array mit allen Plugin-URLs (gleich aussehende Plugins, mit verschiedenen Import-Dateien) anzuhängen. Dafür kann ich manuell Funktionen schreiben und sie zum Filter hinzufügen, was eine langwierige und langwierige Aufgabe ist, wenn es viele solcher Plugins gibt, also ist meine Idee, nur ein Objekt zu erstellen, das dies für mich tun wird, da nur der Präfix-Name der Funktion verwendet für Filterwechsel (und Array-Schlüssel) –