Hàm gọi PHP từ một lớp khác

Cập nhật lần cuối 7 tháng trước

public function edit[$id] {
    return $this->show[$id];
}

Bạn cần trả lại giá trị

Cập nhật lần cuối 7 tháng trước

Cập nhật lần cuối 7 tháng trước

Xin vui lòng, làm thế nào về việc gọi một phương thức từ một phương thức khác trong một lớp khác?

Cập nhật lần cuối cách đây 5 năm

Đăng nhập để tham gia vào chủ đề này

Chúng ta có thể truy cập các thuộc tính [biến] và phương thức [hàm] của các lớp khác bằng cách đưa đối tượng lớp vào lớp cần nó

2763 lượt xem

Bởi. Jacob

Đã chỉnh sửa. 2020-09-06 10. 02

Trong PHP hướng đối tượng [OOP], đôi khi có thể muốn truy cập các phương thức từ các lớp khác, Trong bài viết này, chúng ta sẽ thảo luận về hai cách để giải quyết vấn đề này

Vấn đề. Một vấn đề phổ biến dành cho người mới bắt đầu trong OOP là làm thế nào để truy cập các thuộc tính [biến] và phương thức [hàm] từ các lớp khác mà không mở rộng chúng. Chúng tôi thực sự có một số cách để giải quyết vấn đề này. Giải pháp đầu tiên và được đề xuất là sử dụng một kỹ thuật có tên là Dependency injection [DI], kỹ thuật này cho phép chúng tôi chia nhỏ mã của mình và tổ chức mã trong các lớp riêng biệt, sau đó có thể khởi tạo độc lập

Xem thêm. Một lớp học lớn so với nhiều lớp học

Khi sử dụng DI, chúng ta thường sẽ khởi tạo một lớp một lần trong thư mục gốc của thành phần [I. e. mục lục. php], rồi chuyển nó cho các lớp tiếp theo phụ thuộc vào nó. Dưới đây là một ví dụ về cách kỹ thuật này có thể được sử dụng

$db = new db_client[];
$handle_users = new handle_users[$db];

Trong ví dụ này, db_client[] là một lớp độc lập được chia sẻ bởi hai hoặc nhiều đối tượng. Không nên kéo dài. Thay vì mở rộng nó, chúng tôi đưa nó vào các lớp cần truy cập cơ sở dữ liệu

Bên trong handle_users[], đối tượng cơ sở dữ liệu sẽ có sẵn trong phương thức ma thuật __construct[]

class handle_users {
  private $db;

  public function __construct[$db]{
   $this->db = $db;
  }
   
   public function login_check[] {
    //  $db->query[''];
    // ...
   }
}

Tiêm phụ thuộc trong OOP

Một cách được đề xuất để làm cho một lớp phụ thuộc vào lớp khác, là sử dụng phép nội xạ hàm tạo. Giải pháp mà chúng ta thảo luận trong phần này sẽ hiệu quả trong hầu hết các trường hợp. Chúng ta hãy bắt đầu bằng cách tưởng tượng một lớp độc lập được chia sẻ bởi nhiều đối tượng

class db_client {
  public $db_link;

  private $db_host = "localhost";
  private $db_user = "Username";
  private $db_pw = "Password";
  private $db_name = "Database";

  public function __construct[] {
    $this->db_link = @new mysqli[$this->db_host, $this->db_user, $this->db_pw, $this->db_name];
  }
}

Hãy coi lớp db_client[] như một ứng dụng khách để xử lý tất cả nội dung cơ sở dữ liệu. Vì nó có thể được chia sẻ bởi nhiều dự án hoặc đối tượng khác nhau, chúng ta nên cố gắng biến nó thành một lớp độc lập

Chúng ta không nên mở rộng db_client từ lớp handle_users, vì nó sẽ làm cho nó kết hợp quá chặt chẽ với mã người dùng và làm hỏng tính di động của lớp db_client[]. Thay vào đó, chúng ta nên sử dụng DI để cung cấp đối tượng cơ sở dữ liệu dưới dạng phụ thuộc cho lớp trình xử lý người dùng khi khởi tạo

Bây giờ, hãy tưởng tượng chúng ta cũng tạo một lớp handle_users xử lý mọi thứ liên quan đến người dùng, chẳng hạn như tạo người dùng mới, đăng nhập và đăng xuất, v.v. Lớp handle_users cần db_client[]; . Để làm điều này, chúng ta có thể chuyển db_client làm tham số khi khởi tạo lớp handle_users

class handle_users {
  public $db;
    
  public function __construct[$db] {
    $this->db = $db; // Make $db available via "$this->db->your_function[]"
  }
  public function  {
    $this->db->db_link->query['SELECT * FROM....']; // The db_client object used inside handle_users.
  }
}

Để điều này hoạt động, trước tiên chúng ta cần tạo một thể hiện của lớp db_client, sau đó chuyển nó dưới dạng tham số khi tải lớp handle_users. Tôi. e

require $_SERVER["DOCUMENT_ROOT"] . 'db_class.php'; // Handles the Database stuff
require $_SERVER["DOCUMENT_ROOT"] . 'handle_users.php'; // All user related stuff

$db = new db_client[];
$handle_users = new handle_users[$db];

__xây dựng[]; . Đối tượng $db tự động có sẵn bên trong phương thức __construct nơi chúng ta có thể gán nó cho một thuộc tính [biến]

Sử dụng singleton trong PHP

Một cách khác để truy cập các phương thức trong một lớp khác là sử dụng singleton. Điều này cho phép sử dụng các phương thức mà không cần khởi tạo lớp trước. Thay vào đó, đối tượng được tạo bên trong chính lớp đó

Ghi chú. Sử dụng singleton trong PHP không được khuyến khích

Một lớp cơ sở dữ liệu trong singleton trông như thế này

class db_client {
  private static $instance = null;

  // Credentials
  private $db_host = "localhost";
  private $db_user = "Username";
  private $db_pw = "Password";
  private $db_name = "Database";

  public static function getInstance[] {
    if [self::$instance == null] {
      self::$instance = new Singleton[];
    }
    return self::$instance;
  }
  public function getConnection[] {
  	return $this->db_link;
  }

  private function __construct[] {
    $this->db_link = @new mysqli[$this->db_host, $this->db_user, $this->db_pw, $this->db_name];
  }
}

Để thực hiện một truy vấn cơ sở dữ liệu, chỉ cần làm như thế này

$db = db_client::getInstance[];
$mysqli = $db->getConnection[]; 
$result = $mysqli->query["SELECT foo FROM ....."];

Phương thức __construct[] được khai báo là private, ngăn việc tạo đối tượng từ bên ngoài lớp bằng toán tử new. Thay vào đó, đối tượng được tạo từ bên trong phương thức getInstance[]

Làm cách nào để gọi một hàm từ một lớp PHP khác?

Phương thức gọi Php từ một lớp khác với các ví dụ về mã .
$classA = newClassA[];
$name = $classA->getName[];
tiếng vang $name;

Bạn có thể gọi một hàm từ một lớp khác không?

Kết luận. Trong Java, một phương thức có thể được gọi từ một lớp khác dựa trên công cụ sửa đổi truy cập của nó . Ví dụ: một phương thức được tạo bằng công cụ sửa đổi công khai có thể được gọi từ bên trong cũng như bên ngoài lớp/gói. Phương thức được bảo vệ có thể được gọi từ một lớp khác bằng cách sử dụng tính kế thừa.

Làm cách nào để gọi một hàm lớp không có đối tượng trong PHP?

Làm thế nào để gọi một hàm trong PHP?

Có hai phương pháp để thực hiện việc này. Một là trực tiếp gọi hàm theo tên biến sử dụng dấu ngoặc và tham số và cách còn lại là sử dụng hàm call_user_func[] nhưng trong cả hai phương thức đều sử dụng tên biến. call_user_func[ $var ];

Chủ Đề