Object Query Language (OQL) is a query language similar to SQL (Structured Query Language) but specifically designed for object-oriented databases. It is used to query data from object-oriented database systems (OODBs), which store data as objects. OQL was defined as part of the Object Data Management Group (ODMG) standard.
Object-Oriented Focus:
SQL-Like Syntax:
Querying Complex Objects:
Support for Methods:
Integration with Object-Oriented Languages:
Suppose there is a database with a class Person
that has the attributes Name
and Age
. An OQL query might look like this:
SELECT p.Name
FROM Person p
WHERE p.Age > 30
This query retrieves the names of all people whose age is greater than 30.
In practice, OQL is less popular than SQL since relational databases are still dominant. However, OQL is very powerful in specialized applications that utilize object-oriented data models.
The Document Object Model (DOM) is a standardized interface provided by web browsers to represent and programmatically manipulate structured documents, especially HTML and XML documents. It describes the hierarchical structure of a document as a tree, where each node represents an element, attribute, or text.
Tree Structure:
<html>
element, with child nodes such as <head>
, <body>
, <div>
, <p>
, etc.Object-Oriented Representation:
Interactivity:
<p>
element or insert a new <div>
.Platform and Language Agnostic:
1. Accessing an Element:
let element = document.getElementById("myElement");
2. Changing Content:
element.textContent = "New Text";
3. Adding a New Element:
let newNode = document.createElement("div");
document.body.appendChild(newNode);
The DOM is defined and maintained by the W3C (World Wide Web Consortium) standards and is constantly updated to support modern web technologies.
PSR-12 is a coding style guideline defined by the PHP-FIG (PHP Framework Interoperability Group). It builds on PSR-1 (Basic Coding Standard) and PSR-2 (Coding Style Guide), extending them to include modern practices and requirements.
PSR-12 aims to establish a consistent and readable code style for PHP projects, facilitating collaboration between developers and maintaining a uniform codebase.
namespace
declaration.use
statements should follow the namespace
declaration.namespace App\Controller;
use App\Service\MyService;
use Psr\Log\LoggerInterface;
{
for a class or method must be placed on the next line.public
, protected
, private
) is mandatory for all methods and properties.class MyClass
{
private string $property;
public function myMethod(): void
{
// code
}
}
public function myFunction(
int $param1,
string $param2
): string {
return 'example';
}
{
must be on the same line as the control structure.if ($condition) {
// code
} elseif ($otherCondition) {
// code
} else {
// code
}
[]
) for arrays.$array = [
'first' => 'value1',
'second' => 'value2',
];
?
.public function getValue(?int $id): ?string
{
return $id !== null ? (string) $id : null;
}
<?php
tag and must not include a closing ?>
tag.PSR-12 extends PSR-2 by:
PSR-12 is the standard for modern and consistent PHP code. It improves code quality and simplifies collaboration, especially in team environments. Tools like PHP_CodeSniffer
or PHP-CS-Fixer
can help ensure adherence to PSR-12 effortlessly.
PSR-1 is a PHP Standards Recommendation created by the PHP-FIG (Framework Interop Group) that defines basic coding standards for PHP code style and structure to ensure interoperability between different PHP projects and frameworks. Its main purpose is to establish a consistent baseline for PHP code, making it easier to understand and collaborate on projects across the PHP ecosystem. PSR-1, also known as the Basic Coding Standard, includes several key guidelines:
File Formatting:
<?php
or <?=
tags.Namespace and Class Names:
StudlyCaps
(PascalCase).Constants, Properties, and Method Naming:
CONST_VALUE
).camelCase
.Autoloading:
include
or require
statements.PSR-1 is considered a foundational standard, and it works in tandem with PSR-2 and PSR-12, which define more detailed code formatting guidelines. Together, these standards help improve code readability and consistency across PHP projects.
An Entity is a central concept in software development, particularly in Domain-Driven Design (DDD). It refers to an object or data record that has a unique identity and whose state can change over time. The identity of an entity remains constant, regardless of how its attributes change.
Unique Identity: Every entity has a unique identifier (e.g., an ID) that distinguishes it from other entities. This identity is the primary distinguishing feature and remains the same throughout the entity’s lifecycle.
Mutable State: Unlike a value object, an entity’s state can change. For example, a customer’s properties (like name or address) may change, but the customer remains the same through its unique identity.
Business Logic: Entities often encapsulate business logic that relates to their behavior and state within the domain.
Consider a Customer entity in an e-commerce system. This entity could have the following attributes:
If the customer’s name or address changes, the entity is still the same customer because of its unique ID. This is the key difference from a Value Object, which does not have a persistent identity.
Entities are often represented as database tables, where the unique identity is stored as a primary key. In an object-oriented programming model, entities are typically represented by a class or object that manages the entity's logic and state.
In object-oriented programming (OOP), a "trait" is a reusable class that defines methods and properties which can be used in multiple other classes. Traits promote code reuse and modularity without the strict hierarchies of inheritance. They allow sharing methods and properties across different classes without those classes having to be part of an inheritance hierarchy.
Here are some key features and benefits of traits:
Reusability: Traits enable code reuse across multiple classes, making the codebase cleaner and more maintainable.
Multiple Usage: A class can use multiple traits, thereby adopting methods and properties from various traits.
Conflict Resolution: When multiple traits provide methods with the same name, the class using these traits must explicitly specify which method to use, helping to avoid conflicts and maintain clear structure.
Independence from Inheritance Hierarchy: Unlike multiple inheritance, which can be complex and problematic in many programming languages, traits offer a more flexible and safer way to share code.
Here’s a simple example in PHP, a language that supports traits:
trait Logger {
public function log($message) {
echo $message;
}
}
trait Validator {
public function validate($value) {
// Validation logic
return true;
}
}
class User {
use Logger, Validator;
private $name;
public function __construct($name) {
$this->name = $name;
}
public function display() {
$this->log("Displaying user: " . $this->name);
}
}
$user = new User("Alice");
$user->display();
In this example, we define two traits, Logger
and Validator
, and use these traits in the User
class. The User
class can thus utilize the log
and validate
methods without having to implement these methods itself.
In programming, the properties of a class are special methods or members that control access to the internal data (fields or attributes) of a class. They are used to regulate access to the state information of an object and ensure that data is consistent and under control. Properties are an essential component of object-oriented programming and provide a means to implement data encapsulation and abstraction.
Here are some key features of properties in programming:
Getter and Setter: Properties typically have a getter and an optional setter. The getter allows reading the value of the property, while the setter allows setting the value, controlling access to the data.
Abstraction: Properties allow data abstraction by providing a public interface through which private data can be accessed without knowledge of the data implementation details.
Encapsulation: By using properties, you can restrict access to internal data and ensure that changes to the data occur according to defined rules and conditions.
Read-Only and Read-Write Access: Some properties can be read-only (with only a getter) or read-write (with both getter and setter) based on requirements.
Syntax: The syntax for declaring properties may vary depending on the programming language. In languages like C# and Java, you use the get
and set
keywords, as articlen in the following example:
public class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
In this example, there is a property named "Name" that controls access to the private field "name." It allows reading and setting the name of an object of the "Person" class.
Properties are helpful in making code more readable and maintainable since they provide a consistent interface for accessing data and allow you to integrate validation logic or other actions when reading or writing data.