Làm cách nào để tạo trình tạo mã trong PHP?

PhpStorm cung cấp nhiều cách để tạo các cấu trúc mã phổ biến và các phần tử định kỳ, giúp bạn tăng năng suất. Đây có thể là các mẫu tệp được sử dụng khi tạo tệp mới, các mẫu trực tiếp tùy chỉnh hoặc được xác định trước được áp dụng khác nhau dựa trên ngữ cảnh, các trình bao bọc khác nhau hoặc ghép nối tự động các ký tự

Ngoài ra, PhpStorm cung cấp khả năng hoàn thành mã và hỗ trợ Emmet

Từ menu chính, chọn Mã. Tạo Alt+Chèn để mở menu bật lên với các cấu trúc có sẵn mà bạn có thể tạo.

Tạo các hàm tạo

PhpStorm có thể tạo một hàm khởi tạo khởi tạo các thuộc tính lớp cụ thể bằng cách sử dụng các giá trị của các đối số tương ứng

Tạo một hàm tạo cho một lớp

  1. Trên menu , hãy nhấp vào Tạo Alt+ .

  2. Trong cửa sổ bật lên Tạo , hãy nhấp vào Trình xây dựng cho Kotlin.

  3. Nếu lớp chứa các trường, hãy chọn các trường sẽ được khởi tạo bởi hàm tạo và nhấp vào OK .

Đoạn mã sau hiển thị kết quả của việc tạo một hàm tạo cho một lớp

lớp MyClass { trường $ công khai; . * @param $field */ public function __construct[$field] { $this->field = $field;

Tạo getters và setters

PhpStorm có thể tạo các phương thức truy cập và biến đổi [ getterssetters] for the fields in your classes. Generated methods have only one argument.

Trong ngữ cảnh PHP , getters và setters được tạo bằng cách sử dụng PHP Getter/Setter/Fluent . Theo mặc định, như được chỉ định trong các mẫu này, setters được tạo với tiền tố set và getters với tiền tố is hoặc get tùy theo loại thuộc tính được suy luận – boolean hoặc non-boolean. Tiền tố là giá trị của biến ${GET_OR_IS} trong mẫu getter mặc định. Các mẫu được định cấu hình trong tab file templates. By default, as specified in these templates, setters are generated with the set prefix, and getters with the is or get prefix according to the inferred property type – boolean or non-boolean. The prefix is the value of the ${GET_OR_IS} variable in the default getter template. The templates are configured in the trên Tệp và mẫu mã.

  1. Trên menu , hãy nhấp vào Tạo Alt+ .

  2. Trong cửa sổ bật lên Tạo , nhấp vào một trong các tùy chọn sau.

    • Getter để tạo các phương thức truy cập để nhận các giá trị hiện tại của thuộc tính lớp.

    • Setter để tạo các phương thức trình biến đổi để thiết lập các giá trị của thuộc tính lớp.

    • Getter và Setter để tạo cả phương thức truy cập và biến đổi.

    Nếu bạn cần tạo một trình thiết lập thông thạo để trả về thêm một tham chiếu ________38____ cho lớp hiện tại, hãy chọn Fluent setters checkbox.

    Xem xét ví dụ sau

    lớp Ví dụ { public $foo; . khoảng trống { $this->foo = $foo;

    lớp Ví dụ { public $foo;

  3. Chọn các trường để tạo getters hoặc setters và nhấp vào OK .

Để tùy chỉnh thứ tự và sơ đồ đặt tên của getters và setters đã tạo, trong hộp thoại Cài đặt [Ctrl+Alt+S], hãy chuyển đến . Kiểu mã. PHP Editor | Code Style | PHP và chuyển sang tab Tạo mã .

Đoạn mã sau đây cho thấy kết quả của việc tạo các phương thức getter và setter cho một lớp có một trường var

lớp MyClass { /** * @return hỗn hợp */ public function getVar[] { return $this->var; . khoảng trống { $this->var = $var;

Bạn đã bao giờ nghĩ đến việc viết mã chịu trách nhiệm tạo các lớp, phương thức, thuộc tính PHP nhất định một cách tự động chưa?

Khái niệm

Ý tưởng cơ bản khá đơn giản. Bạn viết mã sẽ tạo ra các phần khác của mã, hàm, biến, lớp, khối tài liệu, v.v. Khi bạn làm điều đó bằng một ngôn ngữ lập trình [trong trường hợp của chúng tôi là PHP], bạn có thể chỉ định các tham số, câu lệnh if-else, vòng lặp, v.v.

Tất nhiên, việc có thể tạo mã PHP tự động không có nghĩa là chúng tôi, những nhà phát triển, sẽ bị thay thế. Nhưng nó có thể được sử dụng để tạo thành một cấu trúc cơ bản mà sau này sẽ được con người phát triển thêm. Ví dụ, thay vì sao chép-dán để chuẩn bị một nhóm lớp ban đầu trong ứng dụng của bạn, bạn có thể sử dụng trình tạo

Tạo mã đã được sử dụng trong các khuôn khổ khác nhau. Xem các lệnh bảng điều khiển Symfony2 GeneratorBundle, CakePHP hoặc Laravel Artisan để biết ví dụ

Tạo các lớp PHP với Memio

Nếu bạn muốn viết tập lệnh của riêng mình để tự động tạo mã PHP, một trong các tùy chọn là sử dụng thư viện Memio. Điểm hay của Memio là nó được viết tốt, sử dụng mã hướng đối tượng. Bạn không cần phải viết mã mục tiêu trong chuỗi, thực hiện nối các biến chuỗi, v.v. Mọi thứ đang được thực hiện bằng cách tạo các thể hiện của lớp và gọi các phương thức của chúng. Bản thân các mẫu cho mã đầu ra được lưu trữ dưới dạng các mẫu Twig

Để bắt đầu sử dụng Memio trong dự án của bạn, chỉ cần thêm nó vào tệp composer.json, như được viết trong tài liệu. Lớp cốt lõi, chịu trách nhiệm tạo mã – PrettyPrinter – yêu cầu một thể hiện Twig_Environment làm đối số hàm tạo. Nó nên được khởi tạo theo cách sau

$twigLoaderFilesystem = new Twig_Loader_Filesystem['vendor/memio/memio/templates'];
$twigEnvironment = new Twig_Environment[$twigLoaderFilesystem, []];

$memioPrettyPrinter = new \Memio\Memio\PrettyPrinter[$twigEnvironment];

Để tạo một số mã PHP với Memio, bạn phải tạo các đối tượng đại diện cho các phần mã cụ thể, sau đó chỉ cần chuyển chúng vào phiên bản PrettyPrinter và kết quả là bạn sẽ nhận được mã đầu ra. Mỗi đối tượng đại diện cho mã được tạo tự động là một thể hiện của một trong các lớp Memio

$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
1. Để tùy chỉnh mã đầu ra, bạn cần gọi các phương thức cụ thể trên các phiên bản này và thư viện Memio sẽ thực hiện phần còn lại khi in. Thêm phần thân vào một phương thức, đặt mức độ hiển thị của thuộc tính, đặt giao diện mà lớp thực hiện – tất cả những việc đó được thực hiện bằng cách gọi các phương thức thích hợp. Đây là một ví dụ về việc tạo một lớp Người dùng

$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];

Điều này sẽ tạo ra đầu ra sau

class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}

Ví dụ thế giới thực. Bản đồ quan hệ giữa các đối tượng

Mã PHP tự động tạo thường được sử dụng khi ánh xạ cấu trúc cơ sở dữ liệu tới các lớp PHP. Mỗi bảng trong cơ sở dữ liệu có thể được đại diện bởi một lớp riêng biệt trong ứng dụng PHP. Sau đó, mỗi cột của bảng sẽ được đại diện bởi một thuộc tính lớp. Hãy thử viết một kịch bản đơn giản sẽ tạo các lớp như vậy, dựa trên cấu trúc cơ sở dữ liệu MySQL

Để bắt đầu với tập lệnh của chúng tôi, chúng tôi cần tìm nạp danh sách các bảng trong cơ sở dữ liệu đã chọn. Chúng tôi cũng sẽ cần danh sách các cột trong mỗi bảng này. Để có được tất cả dữ liệu này, chúng ta phải sử dụng hai lệnh MySQL.

$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
2 ở đầu và sau đó là
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
3 cho mỗi bảng được trả về trong truy vấn đầu tiên

Bước tiếp theo là tạo một lớp PHP riêng cho từng bảng. Tên của lớp sẽ giống như tên bảng, chỉ bắt đầu bằng một chữ in hoa

foreach[$tableNames as $table] {
    $class = new \Memio\Memio\Model\Object[ucfirst[$table]];

    //...
}

Để làm cho các lớp của chúng tôi hữu ích hơn, chúng tôi sẽ thêm các thuộc tính lớp đại diện cho từng cột trong bảng. Giả sử rằng chúng ta đã lưu trữ các tên cột trong một mảng phẳng, đoạn mã sẽ như sau

foreach[$columnNames as $column] {
    $property = \Memio\Memio\Model\Property::make[$column];
    $class->addProperty[$property];
}

Và đó là tất cả. Để lấy mã đầu ra cho lớp, chỉ cần chuyển biến

$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
4 cho phương thức Memio
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
5

$code = $memioPrettyPrinter->generateCode[$class];

Điều này cho phép chúng tôi tự động tạo các lớp cho tất cả các bảng trong cơ sở dữ liệu của chúng tôi

Mở rộng Model Generator

Ví dụ trên chỉ là phần giới thiệu đơn giản để làm việc với Memoo. Để làm cho các lớp của chúng tôi dễ sử dụng hơn, chúng tôi có thể mở rộng chúng theo nhiều cách. Đầu tiên, hãy tạo getters và setters cho từng thuộc tính. Vòng lặp của chúng tôi thông qua các tên cột trong một bảng bây giờ sẽ như sau

foreach[$columnNames as $column] {
    $property = \Memio\Memio\Model\Property::make[$column];
    $class->addProperty[$property];

    $getter = Method::make['get' . ucfirst[$column]]->setBody['return $this->' . $column . ';'];
    $class->addMethod[$getter];

    $setterArgument = Argument::make['string', $column];
    $setter = Method::make['set' . ucfirst[$column]]->addArgument[$setterArgument]->setBody['$this->' . $column . ' = $' . $column . ';'];
    $class->addMethod[$setter];
}

Như bạn có thể thấy, chúng tôi đã tạo hai biến khởi tạo lớp Memio

$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
6.
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
7 và
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
8. Tên của các phương thức sẽ được tạo là
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
9 và
class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}
0. Vì phương thức setter cần một đối số, chúng ta cần tạo một thể hiện của lớp Memio
class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}
1. Sau đó, chúng tôi chuyển nó sang phương thức setter của mình bằng cách gọi
class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}
2 trên biến
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
8. Bước tiếp theo là thêm phần thân vào cả hai phương thức getter và setter, chỉ bằng cách gọi phương thức
class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}
4. Cuối cùng, chúng tôi thêm các phương thức này vào lớp bằng cách gọi
class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}
5 trên biến
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
4

Ví dụ trên cho thấy một khía cạnh quan trọng khi làm việc với Memoo. Xin lưu ý rằng chúng tôi luôn chuyển các đối tượng đại diện cho các phần nhỏ của mã lên cấp cao hơn. Đầu tiên là đối số phương thức [lớp

class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}
1]. Sau đó, chúng tôi tạo một phương thức [lớp
$class = \Memio\Memio\Model\Object::make['User'];

$nameProperty = \Memio\Memio\Model\Property::make['name'];
$class->addProperty[$nameProperty];

$getNameMethod = \Memio\Memio\Model\Method::make['getName']->setBody['return $this->name'];
$class->addMethod[$getNameMethod];

echo $memioPrettyPrinter->generateCode[$class];
6] và thêm đối số vào phương thức [
class User
{
    private $name;

    public function getName[]
    {
        return $this->name;
    }
}
9]. Phương thức nên được đặt bên trong một lớp, vì vậy chúng tôi tạo một lớp [lớp
foreach[$tableNames as $table] {
    $class = new \Memio\Memio\Model\Object[ucfirst[$table]];

    //...
}
0] và thêm phương thức vào lớp [_______6_______1]. Vì vậy, ý tưởng chung là bắt đầu từ các phần nhỏ của mã và liên kết chúng với các vùng chứa cấp cao hơn

Để thể hiện toàn bộ cấu trúc mã trong Memio, bạn có thể đặt thêm lớp đầu ra [lớp

foreach[$tableNames as $table] {
    $class = new \Memio\Memio\Model\Object[ucfirst[$table]];

    //...
}
0] vào một tệp [ví dụ của lớp
foreach[$tableNames as $table] {
    $class = new \Memio\Memio\Model\Object[ucfirst[$table]];

    //...
}
3]. Bao gồm lớp Tệp trong tập lệnh Memio của bạn cho phép bạn tạo mã có khai báo không gian tên, thông tin giấy phép và thẻ mở PHP ở đầu đầu ra. Xem tài liệu để kiểm tra cách nó có thể được triển khai và tự mình thử thêm mã thích hợp. Để lấy toàn bộ ứng dụng dựa trên ví dụ trên, chỉ cần kiểm tra repo Github được kết nối với bài viết

Bước tiếp theo

Trong ví dụ của chúng tôi, chúng tôi chỉ tạo một trình tạo lớp đơn giản để ánh xạ các bảng cơ sở dữ liệu thành các đối tượng. Mã mẫu có thể được mở rộng thành một tập lệnh nâng cao hơn nhiều. Ví dụ: bạn có thể sử dụng thông tin về các loại cột từ MySQL và xác thực các biến đang được chuyển cho các phương thức setter. Bước tiếp theo, bạn có thể tạo mã duy trì đối tượng trong cơ sở dữ liệu, bằng cách chuyển một thể hiện đối tượng vào câu lệnh MySQL

foreach[$tableNames as $table] {
    $class = new \Memio\Memio\Model\Object[ucfirst[$table]];

    //...
}
4 hoặc
foreach[$tableNames as $table] {
    $class = new \Memio\Memio\Model\Object[ucfirst[$table]];

    //...
}
5

Cũng nên nhớ rằng đầu ra của tập lệnh dựa trên Memio có thể được sửa đổi bằng cách thay đổi các mẫu mặc định. Ví dụ: nếu bạn muốn tạo mã tuân thủ các tiêu chuẩn mã hóa được sử dụng trong dự án của mình, tất cả những gì bạn cần làm là thực hiện thay đổi trong mẫu. Sau đó, tất cả mã được tạo tự động sẽ được tạo dựa trên quy ước và phong cách mã hóa của riêng bạn. Tài liệu mẫu chứa tất cả các chi tiết về cách thay thế các mẫu mặc định bằng các tệp của riêng bạn

Tôi khuyến khích bạn tự viết một số tập lệnh tự động tạo để kiểm tra tất cả các tính năng của thư viện Memio. Chia sẻ kết quả và suy nghĩ của bạn trong phần bình luận bên dưới. Chúc vui vẻ

Chia sẻ bài viết này

Jacek Barecki

Jacek là nhà phát triển web chuyên xây dựng các ứng dụng web mở rộng, chủ yếu là các giải pháp thương mại điện tử. Các công nghệ anh ấy sử dụng hàng ngày bao gồm PHP, MySQL, HTML+CSS và JS+jQuery. Trong vài năm qua, anh ấy là nhà phát triển chính của nền tảng cửa hàng trực tuyến được tùy chỉnh cao ở Ba Lan. Giờ đây, anh ấy đang phát triển một số trang web thương mại điện tử đang chạy ở Ba Lan và Đức, thường có hàng trăm nghìn lượt xem trang mỗi ngày. Để tạm dừng việc viết mã, anh ấy thực hiện các bài tập luyện crossfit đầy thử thách, ra ngoài nếm thử một số món ăn mới hoặc tìm hiểu một cuốn sách hoặc tạp chí tâm lý thú vị

Làm cách nào để tạo mã PHP?

Tạo cơ sở dữ liệu
Chỉnh sửa các trường trong cơ sở dữ liệu
Sao chép, đổi tên và thả bảng
Tạo và loại bỏ các thủ tục và chức năng
Chạy truy vấn và tham gia các bảng dựa trên kết quả truy vấn
Tạo mã HTML, CSS và MySQL cũng như các biến PHP

Làm cách nào để tạo trình tạo mã QR trong PHP?

Tạo mã QR bằng PHP .
BƯỚC 1. Xác định lớp QrCode trong qrcode. .
BƯỚC 2. Xác định URL của API biểu đồ Google trong Lớp QrCode. .
BƯỚC 3. Xác định Chức năng để tạo mã QR thuộc các loại khác nhau trong Lớp QrCode. .
BƯỚC 4. Xác định Chức năng để lưu hình ảnh Mã QR trong Lớp QrCode. .
BƯỚC 5. Tạo một chỉ mục tập tin mới

Trình tạo trong PHP là gì?

Trình tạo cho phép bạn viết mã sử dụng foreach để lặp lại một tập hợp dữ liệu mà không cần tạo một mảng trong bộ nhớ , mà .

Làm cách nào để tạo mã QR trong PHP MySQL?

Tạo mã QR và hiển thị trong trình duyệt. Mã QR. png[$text, $file, $ecc, $pixel_size, $frame_size]; $text => Tham số bắt buộc. Các thông số khác là tùy chọn. Các thông số này sẽ được sử dụng để tạo mã QR và lưu trữ thông tin.

Chủ Đề