我可以在wordpress主题功能中创建自己的PHP类吗?

use*_*007 3 php wordpress

我为我的wordpress主题创建了一堆函数.我想将所有函数放在一个类中.所以我可以用它来调用它:

<?php $foo->function() ;?>
Run Code Online (Sandbox Code Playgroud)

我想知道我是否将我的函数放在php类中然后它会导致任何问题??? 请注意我在我的函数中使用WordPress函数.

UPDATE

class foo{
    function js($files){
        $css    =   array($files);
        foreach($css as $style){
            wp_enqueue_script($style, get_template_directory_uri() . '/js/'.$style, array(), '', true );
        }

    }
}
$foo = new foo();
Run Code Online (Sandbox Code Playgroud)

我直接调用时效果很好:

$ foo-> JS( '自举-transition.js,自举-modal.js,自举-dropdown.js');

但是当我打电话给它时,另一个函数是这样的:

function assets(){
    $foo->js('bootstrap-transition.js,bootstrap-modal.js,bootstrap-dropdown.js');
}
Run Code Online (Sandbox Code Playgroud)

然后它显示Call to a member function on a non-object错误

Jho*_* H. 12

以下是PHP中面向对象编程的基础入门,供那些尚未熟悉这些概念的人使用.对象是容器.它们包含表示单个抽象实体的定义函数和变量.面向对象编程的这一特性称为封装.这意味着单个胶囊可能包含多个函数和变量的定义,这些函数和变量旨在协同工作.

例如,如果要操纵在电子商务网站中销售的产品,则可以拥有代表该产品的对象.它可能包含一些定义产品名称,描述,价格等的变量.它还可能包含一些操作对象变量的函数,从数据库存储或检索产品的值,显示产品详细信息等.

在PHP中,使用类定义对象.类包含描述对象的函数和变量的所有定义.

以下是简单产品类的示例:

 class Product
 {
   var $name;
   var $description;
   var $price;



function RetrieveFromDatabase($id)
   {
     /* ... */
   }

   function Display()
   {
     echo 'Name: ', HtmlSpecialChars($this->name),
       '<br>',
       'Description: ', HtmlSpecialChars($this->description),
       '<br>',
       'Price: ', $this->price; 
   }
 };
Run Code Online (Sandbox Code Playgroud)

您可以使用new运算符创建对象.PHP脚本可以创建同一个类的多个对象.您可以在同一类定义的电子商务网站中销售两种产品.

例如,如果你出售书A和书B,你可以使用同一个类来操纵它的名称,描述,价格等.下面是一个如何创建PHP对象的例子:

$book_a = new Product();
 $book_a->name = 'Book A';
 $book_a->description = 'Some description of book A';
 $book_a->price = 9.95;
 $book_a->Display();

 $book_b = new Product();
 $book_b->RetrieveFromDatabase('id-of-book-b');
 $book_b->Display();
Run Code Online (Sandbox Code Playgroud)

类允许您在内部操作信息,而无需使用全局变量在不同的类函数之间共享信息.

例如,如果要检索和显示数据库查询结果,可以使用具有执行查询的函数的类和显示它的其他函数.他们使用类变量$ results来存储和检索查询结果句柄.

 class Query
 {
   var $results;

   function Execute($query)
   {
     $this->results = mysql_query($query);
     return $this->results !== false;
   }

   function Display()
   {
     while(($row = mysql_fetch_row($this->results)))
       print_r($row);
   }
 };

 $query = new Query;
 if($query->Execute(
   'SELECT name, description, price FROM product'
 ))
   $query->Display();
Run Code Online (Sandbox Code Playgroud)

如您所见,您不需要使用任何全局函数或任何全局变量来在类函数之间共享信息.产品的所有行为都封装在Query类中.

面向对象编程提供了其他重要功能,例如继承,它允许创建作为现有类扩展的新类.扩展类可能有更多的函数和变量.它们还可以重新定义已在基类中定义的函数和变量.

面向对象编程的资源链接


elc*_*nrs 6

这就是我通常的做法,例如,functions.php(非常简化):

Myclass::init();

class MyClass
{
  // Add filters and actions here
  function init()
  {
    add_filter('pre_get_posts', array(__CLASS__, 'query_posts'));
  }

  function query_posts($query)
  {
    global $post; // you can use WP variables and functions
    // do something with $query
  }

  function navigation()
  {
    ?>
    <ul>
      <li><a href="<?= home_url() ?>">Home</a></li>
    </ul>
    <?php
  }
}
Run Code Online (Sandbox Code Playgroud)

使用此模式,您可以在静态类中组织所有函数(不需要实例化),然后您可以在任何模板中调用函数,如下所示:

<?php MyClass::navigation() ?>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.