forked from NEKOGET/FuelPHP_docs_jp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextending_core.html
175 lines (143 loc) · 7.75 KB
/
extending_core.html
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./../assets/css/combined.css">
<link rel="shortcut icon" href="./../favicon.ico" />
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
var path = './../';
</script>
<script src="./../assets/js/combined.js"></script>
<title>Core の拡張 - 概要 - FuelPHP ドキュメント</title>
</head>
<body>
<div id="container">
<header id="header">
<div class="table">
<h1>
<a href="http://fuelphp.com"><img height="37px" width="147px" src="./../assets/img/fuel.png" /></a>
<strong>Documentation</strong>
</h1>
<form id="google_search">
<p>
<span id="search_clear"> </span>
<input type="submit" name="search_submit" id="search_submit" value="検索" />
<input type="text" value="" id="search_input" name="search_input" />
</p>
</form>
</div>
<nav>
<div class="clear"></div>
</nav>
<a href="#" id="toc_handle">目次</a>
<div class="clear"></div>
</header>
<div id="cse">
<div id="cse_point"></div>
<div id="cse_content"></div>
</div>
<div id="main">
<h2>コアクラスの拡張</h2>
<p><strong>何をしているかを理解してください。同じ名前で拡張されたコアメソッドは、アプリケーションからと同様にコアから使用されます。
そのため予期しない振る舞いをすることがあります。</strong></p>
<ul>
<li><a href="#extend_dont_replace">コアクラスを置き換えずに拡張する</a></li>
<li><a href="#extend_and_replace">コアクラスを拡張し、置き換える</a></li>
<li><a href="#extend_from_packages">パッケージからコアを拡張する</a></li>
<li><a href="#extension_limitations">拡張の制限</a></li>
</ul>
<article>
<h3 id="extend_dont_replace">コアクラスを置き換えずに拡張する</h3>
<p>最も簡単で、あなたが生成した他のクラスと同様に動作します。
グローバル名前空間のコアクラスを単に拡張します。</p>
<pre><code>class MyConfig extends Config {}</code></pre>
</article>
<article>
<h3 id="extend_and_replace">コアクラスを拡張し、置き換える</h3>
<p>あなたのアプリケーションから使用される場合と同様に、拡張したコアクラスが他のコアクラスからも使用されるようにするには、
元のコアクラスと同じ名前でクラスを拡張する必要があります。ただし、"Fuel\Core" 名前空間から拡張するようにしてください。
"fuel/app/classes/lang.php" に Lang クラスを拡張した例を示します。</p>
<pre><code>class Lang extends Fuel\Core\Lang {}</code></pre>
<p>しかし、コアクラスを同じ名前を持つクラスは、デフォルトでは無視されます。
オートローダに置き換えたクラスを認識させるには、アプリケーションブートストラップファイルで登録するする必要があります。次の行を探してください:</p>
<pre><code>Autoloader::add_classes(array(
// ここにオーバーライドしたいクラスを追加します
// Example: 'View' => APPPATH.'classes/view.php',
));</code></pre>
<p>下記のように、コメントで説明されている通りにLangクラスを追加します。</p>
<pre class="php"><code>Autoloader::add_classes(array(
// ここにオーバーライドしたいクラスを追加します
// Example: 'View' => APPPATH.'classes/view.php',
'Lang' => APPPATH.'classes/lang.php',
));</code></pre>
<p>この後、コアクラスはあなたが拡張したクラスに置き換わります。</p>
<p class="note">頭にフルパスの名前空間をつけて使用した場合、これまで通りコアクラスを使用できます。
上記の拡張"Lang"では、"Fuel\Core\Lang"と呼ぶ事でオリジナルのものを使用できます。</p>
</article>
<article>
<h3 id="extend_from_packages">パッケージからコアを拡張する</h3>
<p>コアの名前空間としてパッケージを追加することで、オートローダはコアからロードする前に
あなたのパッケージからクラスをロードしようとします。
それらのクラスは検出されるようにオートローダでクラスを登録しなければなりません (ファイルシステムオートローダはグローバルへのエイリアスをサポートしません)。
以下は <kbd>View</kbd> クラスを拡張する例です。</p>
<pre class="php"><code>Autoloader::add_core_namespace('Example');
Autoloader::add_classes(array(
'Example\\View' => __DIR__.'/classes/view.php',
));</code></pre>
</article>
<article>
<h3 id="extension_limitations">拡張の制限</h3>
<p>すべてのクラスは app から拡張可能です。殆どのクラスは packages から拡張可能ですが、少し例外があります。</p>
<ul>
<li><kbd>Fuel</kbd></li>
<li><kbd>Config</kbd></li>
<li><kbd>Config_Php</kbd></li>
<li><kbd>Config_File</kbd></li>
<li><kbd>Config_Interface</kbd></li>
<li><kbd>Finder</kbd></li>
<li><kbd>Arr</kbd></li>
<li><kbd>Input</kbd></li>
<li><kbd>Security</kbd></li>
<li><kbd>Event</kbd></li>
<li><kbd>Event_Instance</kbd></li>
<li>そして、あなたが <kbd>app/config/config.php</kbd> で使用している任意のクラス</li>
</ul>
<p>あなたが設定でプロファイラを有効にしている場合は、packages からこれらのクラスもまた拡張することはできません:</p>
<ul>
<li><kbd>Cookie</kbd></li>
<li><kbd>Session</kbd></li>
<li><kbd>Session_Cookie</kbd> (または別のセッションドライバクラス、あなたのセッション設定に依存)</li>
<li><kbd>Session_Driver</kbd></li>
<li><kbd>Date</kbd></li>
<li><kbd>Profiler</kbd></li>
</ul>
<p>
あなたは <kbd>app/bootstrap.php</kbd> ファイルの <kbd>Fuel::init()</kbd> の直前に <kbd>Package::load('mypackagename');</kbd> を
追加することにより、あなたのパッケージを手動で読み込むことでこれらの制限の一部を回避することができます。
そうした場合も、あなたのパッケージでは拡張できません:
</p>
<ul>
<li><kbd>Fuel</kbd></li>
<li><kbd>Config</kbd></li>
<li><kbd>Package</kbd></li>
<li><kbd>Arr</kbd></li>
<li><kbd>Finder</kbd></li>
</ul>
<h4>Autoloader</h4>
<p>Autoloader クラスは特殊なケースであり、あなただけの <code>Autoloader</code>
として一度だけそれを拡張することができそれが利用されます。 拡張した後は、忘れずにグローバルなコアクラスのエイリアス行を削除し、
オリジナルの <code>Fuel\Core\Autoloader</code> の後に <kbd>app/bootstrap.php</kbd>
ファイルに手動でそれを読み込むようにする必要があります。</p>
</article>
</div>
<footer>
<p>
© FuelPHP Development Team 2010-2016 - <a href="http://fuelphp.com">FuelPHP</a> is released under the MIT license.
[ <a href="https://github.com/fuel/docs/commits/1.8/develop/general/extending_core.html">原文コミット履歴</a> | <a href="https://github.com/NEKOGET/FuelPHP_docs_jp/commits/1.8/develop_japanese/general/extending_core.html">翻訳コミット履歴</a> | <a href="https://github.com/NEKOGET/FuelPHP_docs_jp/blob/1.8/develop_japanese/general/extending_core.html">GitHubで修正</a> ]
</p>
</footer>
</div>
</body>
</html>