Php nhận tất cả các lớp mở rộng

Từ khóa

$dbConnection = new PDO['mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'password'];

$dbConnection->setAttribute[PDO::ATTR_EMULATE_PREPARES, false];
$dbConnection->setAttribute[PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION];
5 được sử dụng để dẫn xuất một lớp từ một lớp khác. Cái này gọi là kế thừa. Một lớp dẫn xuất có tất cả các thuộc tính public và protected của lớp mà nó được dẫn xuất từ ​​đó

Có cách nào để lấy các phần tử con [SomeNewClass & SomeOtherNewClass] dựa trên lớp ObjectModel không?

Giải pháp tốt nhất

class ObjectModel {
}

class SomeNewClass extends ObjectModel {
}

class SomeOtherNewClass extends ObjectModel {
}

class SomeOtherNewClassLol extends ObjectModel {
}

function get_extends_number[$base]{
    $rt=0;
  foreach[get_declared_classes[] as $class]
        if[is_subclass_of[$class,$base]] $rt++;
        return $rt;
}

echo get_extends_number['ObjectModel']; //output: 3

Có, bạn có thể làm điều đó, DEMO

Giải pháp liên quan

Php – Cách ngăn SQL injection trong PHP

Cách chính xác để tránh các cuộc tấn công SQL injection, bất kể bạn sử dụng cơ sở dữ liệu nào, là tách dữ liệu khỏi SQL, để dữ liệu vẫn là dữ liệu và sẽ không bao giờ được trình phân tích cú pháp SQL diễn giải thành các lệnh. Có thể tạo câu lệnh SQL với các phần dữ liệu được định dạng chính xác, nhưng nếu bạn không hiểu đầy đủ chi tiết, bạn nên luôn sử dụng câu lệnh đã chuẩn bị sẵn và truy vấn được tham số hóa. Đây là các câu lệnh SQL được máy chủ cơ sở dữ liệu gửi đến và phân tích cú pháp riêng biệt với bất kỳ tham số nào. Bằng cách này, kẻ tấn công không thể tiêm SQL độc hại

Về cơ bản, bạn có hai lựa chọn để đạt được điều này

  1. Sử dụng PDO [đối với mọi trình điều khiển cơ sở dữ liệu được hỗ trợ]

     $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];
    
     $stmt->execute[[ 'name' => $name ]];
    
     foreach [$stmt as $row] {
         // Do something with $row
     }
    
  2. Sử dụng MySQLi [dành cho MySQL]

     $stmt = $dbConnection->prepare['SELECT * FROM employees WHERE name = ?'];
     $stmt->bind_param['s', $name]; // 's' specifies the variable type => 'string'
    
     $stmt->execute[];
    
     $result = $stmt->get_result[];
     while [$row = $result->fetch_assoc[]] {
         // Do something with $row
     }
    

Nếu bạn đang kết nối với cơ sở dữ liệu không phải MySQL, thì có tùy chọn thứ hai dành riêng cho trình điều khiển mà bạn có thể tham khảo [ví dụ:

Chủ Đề