# Classes guide

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

* [**Core classes**](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes)
  * Ready-made classes provided by Cherrycake, providing useful object entities to interact with Cherrycake functionalities like the [Action](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes/action) or the [RequestParameter](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes/requestparameter), and other generalist classes to use throughout your code like the [Item](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes/item) or the [Image](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes/image) classes.
* **App classes**
  * Classes created by the developer to encapsulate object logic, often inheriting from core classes like [Item](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes/item).
  * 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](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes/item) 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](https://cherrycake.tin.cat/version-1.x-beta/reference/core-classes/image) 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.
