> For the complete documentation index, see [llms.txt](https://cherrycake.tin.cat/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cherrycake.tin.cat/version-1.x-beta/guide/classes-guide.md).

# Classes guide

Classes encapsulate [object-specific logic](/version-1.x-beta/architecture/classes.md), and they also come in two flavors:

* [**Core classes**](/version-1.x-beta/reference/core-classes.md)
  * Ready-made classes provided by Cherrycake, providing useful object entities to interact with Cherrycake functionalities like the [Action](/version-1.x-beta/reference/core-classes/action.md) or the [RequestParameter](/version-1.x-beta/reference/core-classes/requestparameter.md), and other generalist classes to use throughout your code like the [Item](/version-1.x-beta/reference/core-classes/item.md) or the [Image](/version-1.x-beta/reference/core-classes/image.md) classes.
* **App classes**
  * Classes created by the developer to encapsulate object logic, often inheriting from core classes like [Item](/version-1.x-beta/reference/core-classes/item.md).
  * For example, in an e-commerce web application you might need a `Product` class, a `ProductCategory` class and perhaps a `CartItem` class, all them might extend the [Item](/version-1.x-beta/reference/core-classes/item.md) core class.

## Loading classes

Classes are automatically loaded the first time they're used, so you don't have to worry to include them anywhere.

For example, to create an [Image](/version-1.x-beta/reference/core-classes/image.md) object, just do this anywhere in your code:

```php
$image = new \Cherrycake\Image;
```

Likewise, to create an object of a class you've created (an App class), just remember to specify our app's namespace instead of `\Cherrycake\`:

```php
$product = new \CherrycakeApp\Product;
```

You can also add `use` statements at the top of your file so you don't need to prefix class names each time you want to use them, like this:

```php
use Cherrycake;

$image = new Image;
```

## App class files

The App classes you create must be stores in the `/src` directory of your app, and the file name must match the class name, plus the `.php` extension. Unlike modules, classes do not need their own directory under `/src`.

> Note that class file names are case-sensitive.
