国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table of Contents
Explanation of the definition and binding method of behavior in PHP's Yii framework, yii framework
Articles you may be interested in:
Home Backend Development PHP Tutorial Explanation of the definition and binding method of behavior in PHP's Yii framework, yii framework_PHP tutorial

Explanation of the definition and binding method of behavior in PHP's Yii framework, yii framework_PHP tutorial

Jul 12, 2016 am 08:56 AM
php yii

Explanation of the definition and binding method of behavior in PHP's Yii framework, yii framework

Definition of behavior

To define behavior, create a class by inheriting yiibaseBehavior or its subclasses. Such as:

namespace app\components;

use yii\base\Behavior;

class MyBehavior extends Behavior
{
  public $prop1;

  private $_prop2;

  public function getProp2()
  {
    return $this->_prop2;
  }

  public function setProp2($value)
  {
    $this->_prop2 = $value;
  }

  public function foo()
  {
    // ...
  }
}

The above code defines the behavior class appcomponentsMyBehavior and provides two properties prop1, prop2 and a method foo() for the component to which the behavior is to be attached. Note that the property prop2 is defined through the getter getProp2() and the setter setProp2(). It can be used in this way because yiibaseObject is the ancestor class of yiibaseBehavior. This ancestor class supports defining properties using getter and setter methods

Tip: Inside the behavior, you can access the component to which the behavior has been attached through the yiibaseBehavior::owner attribute.

Static method binding behavior

To bind behaviors statically, you only need to overload yiibaseComponent::behaviors(). This method is used to describe the behavior of the class. How to describe it? Use configuration to describe, which can be the Behavior class name or the configuration array of the Behavior class:

namespace app\models;

use yii\db\ActiveRecord;
use app\Components\MyBehavior;

class User extends ActiveRecord
{
  public function behaviors()
  {
    return [
      // 匿名的行為,僅直接給出行為的類名稱
      MyBehavior::className(),

      // 名為myBehavior2的行為,也是僅給出行為的類名稱
      'myBehavior2' => MyBehavior::className(),

      // 匿名行為,給出了MyBehavior類的配置數(shù)組
      [
        'class' => MyBehavior::className(),
        'prop1' => 'value1',
        'prop3' => 'value3',
      ],

      // 名為myBehavior4的行為,也是給出了MyBehavior類的配置數(shù)組
      'myBehavior4' => [
        'class' => MyBehavior::className(),
        'prop1' => 'value1',
        'prop3' => 'value3',
      ]
    ];
  }
}

There is also a static binding method, which is to bind through the configuration file:

[
  'as myBehavior2' => MyBehavior::className(),

  'as myBehavior3' => [
    'class' => MyBehavior::className(),
    'prop1' => 'value1',
    'prop3' => 'value3',
  ],
]

Dynamic method binding behavior

Dynamic binding behavior needs to call yiibaseComponent::attachBehaviors():

$Component->attachBehaviors([
  'myBehavior1' => new MyBehavior, // 這是一個(gè)命名行為
  MyBehavior::className(),     // 這是一個(gè)匿名行為
]);

This method accepts an array parameter, and the meaning of the parameter is the same as the static binding behavior above.

In the above examples, the key of the array is used as the name of the behavior, and the behavior that does not provide a key name is an anonymous behavior.

For named behaviors, you can call yiibaseComponent::getBehavior() to get the bound behavior:

$behavior = $Component->getBehavior('myBehavior2');

For anonymous actions, there is no way to directly quote them. However, you can get all the bound behaviors:

$behaviors = $Component->getBehaviors();

Internal principles of binding

Just overloading a yiibaseComponent::behaviors() can you use behaviors so magically? This is just the tip of the iceberg. It is actually related to the binding process. The relevant aspects are:

yii\base\Component::behaviors()
yii\base\Component::ensureBehaviors()
yii\base\Component::attachBehaviorInternal()
yii\base\Behavior::attach()

Behavior only accounts for one of the four methods, and more code is completed in Component.

yiibaseComponent::behaviors() As mentioned above when talking about static method binding behavior, it returns an array to describe the behavior. What about yiibaseComponent::ensuerBehaviors()?

This method will call __get() __set() __isset() __unset() __call() canGetProperty() hasMethod() hasEventHandlers() on() off() etc. when used in many places in the Component. See this Is it a headache? It's not complicated at all. In a word, this function will be called as long as it involves the attributes, methods, and events of the class.

Who are the ensureBehaviors() that are needed by so many mortals? As the name suggests, his role is to "ensure". In fact, it is just to ensure that the behaviors described in behaviors() have been bound:

public function ensureBehaviors()
{
  // 為null表示尚未綁定
  // 多說一句,為空數(shù)組表示沒有綁定任何行為
  if ($this->_behaviors === null) {
    $this->_behaviors = [];

    // 遍歷 $this->behaviors() 返回的數(shù)組,并綁定
    foreach ($this->behaviors() as $name => $behavior) {
      $this->attachBehaviorInternal($name, $behavior);
    }
  }
}

This method is mainly used for subclasses. yiibaseComponent does not have any pre-injection behavior, so this call is useless. But for subclasses, you may overload yiibaseComponent::behaviros() to pre-inject some behavior. Then, this function will inject these behaviors first.

From the above code, you can naturally see the third thing to talk about next, yiibaseComponentattachBehaviorInternal():

private function attachBehaviorInternal($name, $behavior)
{
  // 不是 Behavior 實(shí)例,說是只是類名、配置數(shù)組,那么就創(chuàng)建出來吧
  if (!($behavior instanceof Behavior)) {
    $behavior = Yii::createObject($behavior);
  }

  // 匿名行為
  if (is_int($name)) {
    $behavior->attach($this);
    $this->_behaviors[] = $behavior;

  // 命名行為
  } else {

    // 已經(jīng)有一個(gè)同名的行為,要先解除,再將新的行為綁定上去。
    if (isset($this->_behaviors[$name])) {
      $this->_behaviors[$name]->detach();
    }
    $behavior->attach($this);
    $this->_behaviors[$name] = $behavior;
  }
  return $behavior;
}

The first thing to note is that this is a private member. In fact, in Yii, all methods with the suffix *Internal are private. This method does the following things:

If the $behavior parameter is not a Behavior instance, use it as a parameter and use Yii::createObject() to create it.
If you bind a behavior as an anonymous behavior, attach the behavior directly to this class.
If it is a named behavior, first check if there is a behavior with the same name already bound to this class. If so, replace the previous behavior with the later behavior.
In yiibaseComponent::attachBehaviorInternal(), yiibaseBehavior::attach() is called with $this as the parameter. Thus, the last thing related to binding is introduced, yiibaseBehavior::attach(), which is what we didn’t finish talking about when we talked about the elements of behavior earlier. Let’s take a look at the code first:

public function attach($owner)
{
  $this->owner = $owner;
  foreach ($this->events() as $event => $handler) {
    $owner->on($event, is_string($handler) ? [$this, $handler] :
      $handler);
  }
}

The above code does two things:

  • Set the $owner of the behavior so that the behavior can access and operate the objects it is attached to
  • Traverse the array returned by events() in the behavior, and bind the events to be responded to to the class through on() of the attached class

Summary

Having said so much, let me make a summary about binding:

  • The bound action is initiated from Component;
  • Static binding is implemented by overloading yiibaseComponent::behaviors();
  • Dynamic binding is implemented by calling yiibaseComponent::attachBehaviors();
  • Behavior can also be bound by configuring the as configuration item for Component;
  • Behaviors can be divided into anonymous behaviors and named behaviors. The difference lies in whether a name is given when binding. Named behaviors can be identified by their names, so that operations such as release can be performed in a targeted manner;
  • During the binding process, the later-bound behavior will replace the already-bound behavior of the same name;
  • The meaning of binding has two points. One is to set $owner for the behavior. The second is to bind the handler of the event to be responded to in the behavior to the class.

Articles you may be interested in:

  • How to remove behaviors bound to components in PHP's Yii framework
  • Detailed explanation of using behaviors in PHP's Yii framework Methods
  • In-depth explanation of the properties (Property) in PHP's Yii framework
  • Example tutorials on using database configuration and SQL operations in PHP's Yii framework
  • In-depth analysis of PHP's Yii framework The event mechanism in the Yii framework
  • Comprehensive interpretation of the logging function in the Yii framework of PHP
  • Yii uses find findAll to find out the implementation method of the specified field
  • Parsing the yii database Addition, deletion, check and modification
  • Yii PHP Framework practical introductory tutorial (detailed introduction)
  • Detailed explanation of attribute injection and method injection of component behavior in PHP's Yii framework

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1111897.htmlTechArticleExplanation of the definition and binding method of behavior in PHP's Yii framework. To define behavior in the yii framework, you need to define the behavior through inheritance. yiibaseBehavior or its subclass to create a class. For example: namespace a...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How do I prevent cross-site request forgery (CSRF) attacks in PHP? How do I prevent cross-site request forgery (CSRF) attacks in PHP? Jun 28, 2025 am 02:25 AM

TopreventCSRFattacksinPHP,implementanti-CSRFtokens.1)Generateandstoresecuretokensusingrandom_bytes()orbin2hex(random_bytes(32)),savethemin$_SESSION,andincludetheminformsashiddeninputs.2)ValidatetokensonsubmissionbystrictlycomparingthePOSTtokenwiththe

How to combine two php arrays unique values? How to combine two php arrays unique values? Jul 02, 2025 pm 05:18 PM

To merge two PHP arrays and keep unique values, there are two main methods. 1. For index arrays or only deduplication, use array_merge and array_unique combinations: first merge array_merge($array1,$array2) and then use array_unique() to deduplicate them to finally get a new array containing all unique values; 2. For associative arrays and want to retain key-value pairs in the first array, use the operator: $result=$array1 $array2, which will ensure that the keys in the first array will not be overwritten by the second array. These two methods are applicable to different scenarios, depending on whether the key name is retained or only the focus is on

How to use php exit function? How to use php exit function? Jul 03, 2025 am 02:15 AM

exit() is a function in PHP that is used to terminate script execution immediately. Common uses include: 1. Terminate the script in advance when an exception is detected, such as the file does not exist or verification fails; 2. Output intermediate results during debugging and stop execution; 3. Call exit() after redirecting in conjunction with header() to prevent subsequent code execution; In addition, exit() can accept string parameters as output content or integers as status code, and its alias is die().

Applying Semantic Structure with article, section, and aside in HTML Applying Semantic Structure with article, section, and aside in HTML Jul 05, 2025 am 02:03 AM

The rational use of semantic tags in HTML can improve page structure clarity, accessibility and SEO effects. 1. Used for independent content blocks, such as blog posts or comments, it must be self-contained; 2. Used for classification related content, usually including titles, and is suitable for different modules of the page; 3. Used for auxiliary information related to the main content but not core, such as sidebar recommendations or author profiles. In actual development, labels should be combined and other, avoid excessive nesting, keep the structure simple, and verify the rationality of the structure through developer tools.

How do I access session data in PHP? How do I access session data in PHP? Jun 30, 2025 am 01:33 AM

To access session data in PHP, you must first start the session and then operate through the $_SESSION hyperglobal array. 1. The session must be started using session_start(), and the function must be called before any output; 2. When accessing session data, check whether the key exists. You can use isset($_SESSION['key']) or array_key_exists('key',$_SESSION); 3. Set or update session variables only need to assign values ??to the $_SESSION array without manually saving; 4. Clear specific data with unset($_SESSION['key']), clear all data and set $_SESSION to an empty array.

What are recursive functions in PHP? What are recursive functions in PHP? Jun 29, 2025 am 02:02 AM

Recursive functions refer to self-call functions in PHP. The core elements are 1. Defining the termination conditions (base examples), 2. Decomposing the problem and calling itself recursively (recursive examples). It is suitable for dealing with hierarchical structures, disassembling duplicate subproblems, or improving code readability, such as calculating factorials, traversing directories, etc. However, it is necessary to pay attention to the risks of memory consumption and stack overflow. When writing, the exit conditions should be clarified, the basic examples should be gradually approached, the redundant parameters should be avoided, and small inputs should be tested. For example, when scanning a directory, the function encounters a subdirectory and calls itself recursively until all levels are traversed.

How to create an array in php? How to create an array in php? Jul 02, 2025 pm 05:01 PM

There are two ways to create an array in PHP: use the array() function or use brackets []. 1. Using the array() function is a traditional way, with good compatibility. Define index arrays such as $fruits=array("apple","banana","orange"), and associative arrays such as $user=array("name"=>"John","age"=>25); 2. Using [] is a simpler way to support since PHP5.4, such as $color

The requested operation requires elevation Windows The requested operation requires elevation Windows Jul 04, 2025 am 02:58 AM

When you encounter the prompt "This operation requires escalation of permissions", it means that you need administrator permissions to continue. Solutions include: 1. Right-click the "Run as Administrator" program or set the shortcut to always run as an administrator; 2. Check whether the current account is an administrator account, if not, switch or request administrator assistance; 3. Use administrator permissions to open a command prompt or PowerShell to execute relevant commands; 4. Bypass the restrictions by obtaining file ownership or modifying the registry when necessary, but such operations need to be cautious and fully understand the risks. Confirm permission identity and try the above methods usually solve the problem.

See all articles