<?php
interface TasksManagerInterface
{
public function find(TaskInterface $task);
public function create(TaskInterface $task);
public function update(TaskInterface $task);
public function delete(TaskInterface $task);
}
interface TaskInterface
{
public function find(TaskInterface $task);
public function create(TaskInterface $task);
public function update(TaskInterface $task);
public function delete(TaskInterface $task);
}
abstract class AbstractTask implements TaskInterface
{
protected function _commonTask() {
// какой то общий метод для всех потомков AbstractTask
}
abstract public function find(TaskInterface $task);
abstract public function create(TaskInterface $task);
abstract public function update(TaskInterface $task);
abstract public function delete(TaskInterface $task);
}
abstract class AbstractTasksManager implements TasksManagerInterface
{
protected function _commonTasksManager() {
// какой то общий код для всех потомков AbstractTasksManager
}
abstract public function find(TaskInterface $task);
abstract public function create(TaskInterface $task);
abstract public function update(TaskInterface $task);
abstract public function delete(TaskInterface $task);
}
class Task extends AbstractTask implements TaskInterface
{
public function find(TaskInterface $task)
{
/** Внедрить метод find в TasksManager правильно?
* Или он должен быть в отдельном классе?
* Метод find использует скоупы Yii2
*/
// можно вызывать
$this->_commonTask();
}
public function create(TaskInterface $task)
{
/** Содержимое метода */
}
public function update(TaskInterface $task)
{
/** Содержимое метода */
}
public function delete(TaskInterface $task)
{
/** Содержимое метода */
}
}
class TasksManager extends AbstractTasksManager implements TasksManagerInterface
{
public function find(TaskInterface $task)
{
/** Внедрить метод find в TasksManager правильно?
* Или он должен быть в отдельном классе?
* Метод find использует скоупы Yii2
*/
// можно вызывать
$this->_commonTasksManager();
}
public function create(TaskInterface $task)
{
/** Содержимое метода */
}
public function update(TaskInterface $task)
{
/** Содержимое метода */
}
public function delete(TaskInterface $task)
{
/** Содержимое метода */
}
}
$task = new Task();
$taskManager = new TasksManager();
/*
* jQuery Boilerplate - v3.3.4
* A jump-start for jQuery plugins development.
* http://jqueryboilerplate.com
*
* Made by Zeno Rocha
* Under MIT License
*/
// the semi-colon before function invocation is a safety net against concatenated
// scripts and/or other plugins which may not be closed properly.
;(function ( $, window, document, undefined ) {
// undefined is used here as the undefined global variable in ECMAScript 3 is
// mutable (ie. it can be changed by someone else). undefined isn't really being
// passed in so we can ensure the value of it is truly undefined. In ES5, undefined
// can no longer be modified.
// window and document are passed through as local variable rather than global
// as this (slightly) quickens the resolution process and can be more efficiently
// minified (especially when both are regularly referenced in your plugin).
// Create the defaults once
var pluginName = "defaultPluginName",
defaults = {
propertyName: "value"
};
// The actual plugin constructor
function Plugin ( element, options ) {
this.element = element;
// jQuery has an extend method which merges the contents of two or
// more objects, storing the result in the first object. The first object
// is generally empty as we don't want to alter the default options for
// future instances of the plugin
this.settings = $.extend( {}, defaults, options );
this._defaults = defaults;
this._name = pluginName;
this.init();
}
// Avoid Plugin.prototype conflicts
$.extend(Plugin.prototype, {
init: function () {
// Place initialization logic here
// You already have access to the DOM element and
// the options via the instance, e.g. this.element
// and this.settings
// you can add more functions like the one below and
// call them like so: this.yourOtherFunction(this.element, this.settings).
console.log("xD");
},
yourOtherFunction: function () {
// some logic
}
});
// A really lightweight plugin wrapper around the constructor,
// preventing against multiple instantiations
$.fn[ pluginName ] = function ( options ) {
this.each(function() {
if ( !$.data( this, "plugin_" + pluginName ) ) {
$.data( this, "plugin_" + pluginName, new Plugin( this, options ) );
}
});
// chain jQuery functions
return this;
};
})( jQuery, window, document );
пользуюсь чистым css