Hướng dẫn php call class function without instance - hàm lớp gọi php không có phiên bản

11

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đã nhìn và cố gắng nhưng tôi không thể tìm thấy câu trả lời.

Trong PHP, liệu có thể gọi hàm thành viên của lớp (khi lớp đó yêu cầu một hàm tạo để nhận tham số) mà không cần khởi tạo nó như một đối tượng?

Một ví dụ mã (đưa ra lỗi):

<?php

class Test {
    private $end="";

    function __construct($value) {
        $this->end=$value;
    }

    public function alert($value) {
        echo $value." ".$this->end;
    }
}

//this works:
$example=new Test("world");
$example->alert("hello");

//this does not work:
echo Test("world")::alert("hello");

?>

hỏi ngày 23 tháng 6 năm 2010 lúc 4:06Jun 23, 2010 at 4:06

Hướng dẫn php call class function without instance - hàm lớp gọi php không có phiên bản

2

Thật không may, PHP không có hỗ trợ để làm điều này, nhưng bạn là một anh chàng sáng tạo và nhìn: D

Bạn có thể sử dụng một "nhà máy", mẫu:

<?php

class Foo
{
   private $__aaa = null;

   public function __construct($aaa)
   {
      $this->__aaa = $aaa;
   }

   public static function factory($aaa)
   {
      return new Foo($aaa);
   }

   public function doX()
   {
      return $this->__aaa * 2;
   }
}

Foo::factory(10)->doX();   // outputs 20

Đã trả lời ngày 23 tháng 6 năm 2010 lúc 5:06Jun 23, 2010 at 5:06

2

Chỉ cần làm điều này (trong PHP> = 5.4):

$t = (new Test("Hello"))->foo("world");

Đã trả lời ngày 19 tháng 3 năm 2014 lúc 3:34Mar 19, 2014 at 3:34

Andrew Uandrew uAndrew U

7297 Huy hiệu bạc10 Huy hiệu đồng7 silver badges10 bronze badges

0

Tôi cũng vậy, đang tìm kiếm một lớp lót để thực hiện điều này như là một phần của một biểu thức duy nhất để chuyển đổi ngày từ định dạng này sang định dạng khác. Tôi thích làm điều này trong một dòng mã duy nhất vì nó là một hoạt động logic duy nhất. Vì vậy, đây là một chút khó hiểu, nhưng nó cho phép bạn khởi tạo và sử dụng một đối tượng ngày trong một dòng duy nhất:

$newDateString = ($d = new DateTime('2011-08-30') ? $d->format('F d, Y') : '');

Một cách khác để một dòng chuyển đổi chuỗi ngày từ định dạng này sang định dạng khác là sử dụng hàm trợ giúp để quản lý các phần OO của mã:

function convertDate($oldDateString,$newDateFormatString) {
    $d = new DateTime($oldDateString);
    return $d->format($newDateFormatString);
}

$myNewDate = convertDate($myOldDate,'F d, Y');

Tôi nghĩ rằng cách tiếp cận định hướng đối tượng là tuyệt vời và cần thiết, nhưng đôi khi nó có thể tẻ nhạt, đòi hỏi quá nhiều bước để thực hiện các hoạt động đơn giản.

Đã trả lời ngày 1 tháng 9 năm 2011 lúc 15:40Sep 1, 2011 at 15:40

Bạn không thể gọi một phương thức cấp độ thể hiện mà không có một ví dụ. Cú pháp của bạn:

echo Test("world")::alert("hello");

Không có nhiều ý nghĩa. Hoặc là bạn đang tạo một thể hiện nội tuyến và loại bỏ nó ngay lập tức hoặc phương thức

<?php

class Foo
{
   private $__aaa = null;

   public function __construct($aaa)
   {
      $this->__aaa = $aaa;
   }

   public static function factory($aaa)
   {
      return new Foo($aaa);
   }

   public function doX()
   {
      return $this->__aaa * 2;
   }
}

Foo::factory(10)->doX();   // outputs 20
1 không có phiên bản
<?php

class Foo
{
   private $__aaa = null;

   public function __construct($aaa)
   {
      $this->__aaa = $aaa;
   }

   public static function factory($aaa)
   {
      return new Foo($aaa);
   }

   public function doX()
   {
      return $this->__aaa * 2;
   }
}

Foo::factory(10)->doX();   // outputs 20
2 ngầm.

Assuming:

class Test {
  public function __construct($message) {
    $this->message = $message;
  }

  public function foo($message) {
    echo "$this->message $message";
  }
}

bạn có thể làm:

$t = new Test("Hello");
$t->foo("world");

Nhưng cú pháp PHP không cho phép:

new Test("Hello")->foo("world");

mà nếu không sẽ là tương đương. Có một vài ví dụ về điều này trong PHP (ví dụ: sử dụng lập chỉ mục mảng khi trả về hàm). Nó là như vậy.

Đã trả lời ngày 23 tháng 6 năm 2010 lúc 4:14Jun 23, 2010 at 4:14

cletuscletuscletus

Huy hiệu vàng 605K163163 gold badges903 silver badges940 bronze badges

1

Đối với điều này, bạn có thể làm một

https://www.php.net/manual/en/reflectionclass.newinstancewithoutconstructor.php

Phản ánh lớp của bạn và kích hoạt thể hiện mới mà không có hàm tạo.

Đây là mã mẫu:

<?php

class Test {
    private $end="";

    function __construct($value) {
        $this->end=$value;
    }

    public function alert($value) {
        echo $value." ".$this->end;
    }

    public function end($value) {

        $this->end = $value;        

        return $this; // return Test object so that you can chain to other function method.
    }
}

// Solution #1:
// reflect your class.
$reflector = new \ReflectionClass('Test');

// Then create a new instance without Constructor.
// This will ignore the constructor BUT it will create a new instance of class Test.
$say = $reflector->newInstanceWithoutConstructor();

// use end method that will return the Test object, then you can chain the alert()
$say->end('World!')->alert("Hello"); // output: Hello World!

?>

Đã trả lời ngày 1 tháng 11 năm 2021 lúc 10:20Nov 1, 2021 at 10:20

<?php

class Foo
{
   private $__aaa = null;

   public function __construct($aaa)
   {
      $this->__aaa = $aaa;
   }

   public static function factory($aaa)
   {
      return new Foo($aaa);
   }

   public function doX()
   {
      return $this->__aaa * 2;
   }
}

Foo::factory(10)->doX();   // outputs 20
0

Đã trả lời ngày 23 tháng 6 năm 2021 lúc 19:24Jun 23, 2021 at 19:24

Hướng dẫn php call class function without instance - hàm lớp gọi php không có phiên bản

Làm thế nào để gọi chức năng lớp trong PHP?

Trong lập trình hướng đối tượng trong PHP, các phương thức là các hàm bên trong các lớp ...
Đầu tiên, chúng tôi tạo một đối tượng (ví dụ $) từ ví dụ lớp ..
Tiếp theo, chúng tôi gọi phương thức Echo với -> (toán tử đối tượng) và () (dấu ngoặc đơn).
Các dấu ngoặc đơn chứa các đối số như bình thường ..

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 lớp mà không có đối tượng?

Chúng ta có thể gọi một phương thức tĩnh bằng cách sử dụng ClassName.methodName.Ví dụ tốt nhất về phương thức tĩnh là phương thức chính ().Nó được gọi mà không tạo ra đối tượng.ClassName. methodName. The best example of the static method is the main() method. It is called without creating the object.

Một lớp có thể được thực thi mà không tạo ra một đối tượng?

Giải thích: Cũng có thể thực thi một khối thể hiện mà không tạo một đối tượng.Để thực thi một khối thể hiện mà không tạo một đối tượng, chúng ta cần xác định rõ ràng bên trong phương thức chính.It is also possible to execute an instance block without creating an object. To execute an instance block without creating an object we need to define it explicitly inside the main method.