summaryrefslogtreecommitdiffstats
path: root/user_guide_src/source/general/core_classes.rst
blob: 8cd3a93dc005707e4572fcd893ebab529d518fea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
############################
Creating Core System Classes
############################

Every time CodeIgniter runs there are several base classes that are
initialized automatically as part of the core framework. It is possible,
however, to swap any of the core system classes with your own versions
or even extend the core versions.

**Most users will never have any need to do this, but the option to
replace or extend them does exist for those who would like to
significantly alter the CodeIgniter core.**

.. note:: Messing with a core system class has a lot of implications, so
	make sure you know what you are doing before attempting it.

System Class List
=================

The following is a list of the core system files that are invoked every
time CodeIgniter runs:

-  Benchmark
-  Config
-  Controller
-  Exceptions
-  Hooks
-  Input
-  Language
-  Loader
-  Log
-  Output
-  Router
-  URI
-  Utf8

Replacing Core Classes
======================

To use one of your own system classes instead of a default one simply
place your version inside your local application/core directory::

	application/core/some-class.php

If this directory does not exist you can create it.

Any file named identically to one from the list above will be used
instead of the one normally used.

Please note that your class must use CI as a prefix. For example, if
your file is named Input.php the class will be named::

	 class CI_Input {  }

Extending Core Class
====================

If all you need to do is add some functionality to an existing library -
perhaps add a function or two - then it's overkill to replace the entire
library with your version. In this case it's better to simply extend the
class. Extending a class is nearly identical to replacing a class with a
couple exceptions:

-  The class declaration must extend the parent class.
-  Your new class name and filename must be prefixed with MY\_ (this
   item is configurable. See below.).

For example, to extend the native Input class you'll create a file named
application/core/MY_Input.php, and declare your class with::

	 class MY_Input extends CI_Input {  }

Note: If you need to use a constructor in your class make sure you
extend the parent constructor::

	 class MY_Input extends CI_Input {      function __construct()     {         parent::__construct();     } }

**Tip:** Any functions in your class that are named identically to the
functions in the parent class will be used instead of the native ones
(this is known as "method overriding"). This allows you to substantially
alter the CodeIgniter core.

If you are extending the Controller core class, then be sure to extend
your new class in your application controller's constructors.

::

	class Welcome extends MY_Controller {      function __construct()     {         parent::__construct();     }      function index()     {         $this->load->view('welcome_message');     } }

Setting Your Own Prefix
-----------------------

To set your own sub-class prefix, open your
application/config/config.php file and look for this item::

	$config['subclass_prefix'] = 'MY_';

Please note that all native CodeIgniter libraries are prefixed with CI\_
so DO NOT use that as your prefix.