Hướng dẫn php call function without $this - hàm gọi php mà không có $ this

Vì vậy, tôi có lớp học này:

class A{
      public function do_a(){ return 'a_done';};

      public function do_b(){ return 'b_done';};
}

Vì vậy, tôi yêu cầu tệp PHP và tạo một thể hiện của lớp:

require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.

user_calls.php Nội dung:

echo 'this was the result of '.$System->do_a();
echo 'this was the result of '.$System->do_b();

Vì vậy, điều đó hoạt động, nhưng tôi không muốn người dùng phải sử dụng

require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
1, nhưng chỉ
require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
2.

Bất kỳ giải pháp?

Chỉnh sửa: Tôi cũng muốn giới hạn các chức năng mà người dùng có thể gọi trong tệp user_calls.php, đến các hàm php gốc cơ bản và các chức năng trong lớp A.

Đã hỏi ngày 13 tháng 1 năm 2012 lúc 16:00Jan 13, 2012 at 16:00

Hướng dẫn php call function without $this - hàm gọi php mà không có $ this

6

Tuyên bố miễn trừ trách nhiệm: Trong khi mã này hoạt động và thực hiện những gì bạn yêu cầu, điều đó không có nghĩa là tôi ủng hộ mã hóa như thế này. Rất khó để theo dõi các nhà phát triển khác (và thậm chí có thể bạn trong tương lai ...), và nó cũng sử dụng

require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
3, hầu như luôn luôn là một điều xấu (TM). Điều đó nói rằng, bạn đi đây: While this code works, and does what you requested, that doesn't mean that I advocate coding like this. It's very hard to follow for other developers (and maybe even you in the future...), and it also makes use of
require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
3, which is almost always A Bad Thing(tm). That said, here you go:

getMethods(ReflectionMethod::IS_PUBLIC);

foreach ($aPublicMethods as $method) {
    $php = <<name}() {
    global \$System;
    return \$System->{$method->name}();
}
PHP;

    eval($php);
}

$System = new A();

echo 'this was the result of ' . do_a();
echo 'this was the result of ' . do_b();

Cũng xin lưu ý rằng nếu phương pháp của bạn sử dụng các đối số, mọi thứ thậm chí còn có nhiều lông hơn. Ngoài ra, nếu bạn đặt tên cho bất kỳ phương thức nào của bạn giống như một hàm trong không gian tên toàn cầu (ví dụ

require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
4), điều này sẽ cố gắng xác định lại chúng và có lẽ bạn sẽ gặp lỗi nghiêm trọng.

Đã trả lời ngày 13 tháng 1 năm 2012 lúc 17:06Jan 13, 2012 at 17:06

FtDRbwLXw6FtDRbwLXw6FtDRbwLXw6

27.1K13 Huy hiệu vàng67 Huy hiệu bạc104 Huy hiệu đồng13 gold badges67 silver badges104 bronze badges

4

Các phương thức của một lớp là các phương thức thể hiện (chúng hành động theo một trường hợp cụ thể của một lớp được xác định bởi $ this) hoặc chúng là các phương thức lớp (chúng không gắn với bất kỳ một trường hợp cụ thể nào của một lớp, nhưng cung cấp các dịch vụ nằm trong Remit của lớp.

Một phương thức thể hiện được định nghĩa như sau:

public function foo()
{
}

trong khi một phương thức lớp được xác định với từ khóa tĩnh.

static public function bar()
{
}

Trong phương thức thể hiện, bạn có thể sử dụng $ này để có quyền truy cập vào trạng thái của phiên bản mà phương thức được gọi. Điều này không có sẵn trong phương thức lớp vì nó không gắn liền với bất kỳ một trường hợp nào. Nó có thể truy cập các thành viên khác trong lớp (miễn là họ không gắn liền với một ví dụ) với từ khóa tự.

Phương thức thể hiện được gọi như sau:

$a = new ObjType ()
$output = $a -> foo ();

Phương pháp lớp được gọi như sau:

$output = ObjType::bar ();

Bất kể cách tiếp cận nào bạn sử dụng, bạn cũng phải cung cấp một thể hiện (ví dụ, các phương thức) hoặc một lớp (cho các phương thức lớp) để gọi phương thức. Gọi chỉ

require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
5 hoặc
require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
6 sẽ không hoạt động.

Đã trả lời ngày 13 tháng 1 năm 2012 lúc 16:09Jan 13, 2012 at 16:09

Hướng dẫn php call function without $this - hàm gọi php mà không có $ this

GordonmgordonmGordonM

30.6K15 Huy hiệu vàng87 Huy hiệu bạc129 Huy hiệu đồng15 gold badges87 silver badges129 bronze badges

2

Bạn sẽ phải sử dụng một đóng cửa. Lưu ý rằng nó được gọi trực tiếp từ định nghĩa lớp, không phải đối tượng:

class test {
    function method() {
        echo 'method was called';
    }
}

$method = function(){call_user_func('test::method');};
$method();
$method();
$method();

//output:
//method was calledmethod was calledmethod was called

Để gọi phương thức từ đối tượng, thay vì lớp, bạn sẽ phải chuyển đối tượng vào phần đóng:

class test {
    var $count = 0;
    function method() {
        $this->count++;
        echo $this->count . "|
"; } } $obj = new test; $obj2 = new test; $method = function($object){call_user_func(array($object, 'method'));}; $method($obj); $method($obj); $method($obj); $method($obj2); //output: //1| //2| //3| //1|

Nhưng đó không phải là bất kỳ đẹp hơn hay đơn giản hơn, phải không?

Nếu bạn không muốn làm lộn xộn trang của mình, chỉ cần đặt tên cho đối tượng một cái gì đó ngắn:

require_once("A_class.php");
$System = new A();
require_once("user_calls.php"); //here I import the user file with the function calls.
0

Đã trả lời ngày 13 tháng 1 năm 2012 lúc 16:09Jan 13, 2012 at 16:09

Gordonmgordonmjeremiahs

30.6K15 Huy hiệu vàng87 Huy hiệu bạc129 Huy hiệu đồng8 gold badges24 silver badges29 bronze badges

7

Làm thế nào chúng ta có thể gọi một phương thức mà không tạo đối tượng trong PHP?

Ví dụ giải thích ở đây, chúng tôi tuyên bố một phương thức tĩnh: Chào mừng (). Sau đó, chúng tôi gọi phương thức tĩnh bằng cách sử dụng tên lớp, Double Colon (: :) và tên phương thức (không tạo một thể hiện của lớp trước).using the class name, double colon (::), and the method name (without creating an instance of the class first).

Làm thế nào để bạn gọi một chức năng tự động trong PHP?

Cách duy nhất để làm điều này là sử dụng Magic __call.Bạn cần làm cho tất cả các phương thức riêng tư để chúng không thể truy cập từ bên ngoài.Sau đó xác định phương thức __call để xử lý các cuộc gọi phương thức.Trong __call, sau đó bạn có thể thực hiện bất kỳ chức năng nào bạn muốn trước khi gọi chức năng được gọi là cố ý.using the magic __call . You need to make all methods private so they are not accessable from the outside. Then define the __call method to handle the method calls. In __call you then can execute whatever function you want before calling the function that was intentionally called.

Làm thế nào để bạn gọi một chức năng bên ngoài lớp trong PHP?

Bạn có thể sử dụng request_once () với đường dẫn chính xác của lớp đó sau đó, bạn nên sử dụng đối tượng của tên lớp và tên hàm đi kèm để gọi hàm của lớp bên ngoài.Lưu câu trả lời này.use require_once() with exact path of that class after that you should use the object of the included class and function name for calling the function of outer class. Save this answer.

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

Nếu bạn xác định chức năng trong một chức năng khác, nó có thể được truy cập trực tiếp, nhưng sau khi gọi hàm cha.Ví dụ: function a () {function b () {echo "i là b.";} echo "Tôi là a.";} // b ();Lỗi nghiêm trọng: Gọi đến hàm không xác định b () trong E: \ ... For example: function a () { function b() { echo "I am b."; } echo "I am a.
"; } //b(); Fatal error: Call to undefined function b() in E:\..