fix: converted single to triple backticks12 (#36239)
This commit is contained in:
@ -18,38 +18,39 @@ localeTitle: غابة عشوائية
|
||||
|
||||
في هذه المسابقة ، يتم منحنا قائمة بأحداث التصادم وخصائصها. سوف نتوقع بعد ذلك ما إذا كان هناك إنحلال τ → 3μ حدث في هذا التصادم. هذا τ → 3μ يفترض في الوقت الحاضر من قبل العلماء ألا يحدث ، وكان الهدف من هذه المسابقة هو اكتشاف τ → 3μ يحدث بشكل متكرر أكثر مما يستطيع العلماء فهمه. كان التحدي هنا هو تصميم مشكلة تعلم آلي لشيء لم يلاحظه أحد من قبل. طور العلماء في CERN التصاميم التالية لتحقيق الهدف. https://www.kaggle.com/c/flavours-of-physics/data
|
||||
|
||||
`#Data Cleaning
|
||||
import pandas as pd
|
||||
data_test = pd.read_csv("test.csv")
|
||||
data_train = pd.read_csv("training.csv")
|
||||
data_train = data_train.drop('min_ANNmuon',1)
|
||||
data_train = data_train.drop('production',1)
|
||||
data_train = data_train.drop('mass',1)
|
||||
```python
|
||||
#Data Cleaning
|
||||
import pandas as pd
|
||||
data_test = pd.read_csv("test.csv")
|
||||
data_train = pd.read_csv("training.csv")
|
||||
data_train = data_train.drop('min_ANNmuon',1)
|
||||
data_train = data_train.drop('production',1)
|
||||
data_train = data_train.drop('mass',1)
|
||||
|
||||
#Cleaned data
|
||||
Y = data_train['signal']
|
||||
X = data_train.drop('signal',1)
|
||||
#Cleaned data
|
||||
Y = data_train['signal']
|
||||
X = data_train.drop('signal',1)
|
||||
|
||||
#adaboost
|
||||
from sklearn.ensemble import AdaBoostClassifier
|
||||
from sklearn.tree import DecisionTreeClassifier
|
||||
seed = 9001 #this ones over 9000!!!
|
||||
boosted_tree = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), algorithm="SAMME",
|
||||
#adaboost
|
||||
from sklearn.ensemble import AdaBoostClassifier
|
||||
from sklearn.tree import DecisionTreeClassifier
|
||||
seed = 9001 #this ones over 9000!!!
|
||||
boosted_tree = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), algorithm="SAMME",
|
||||
n_estimators=50, random_state = seed)
|
||||
model = boosted_tree.fit(X, Y)
|
||||
model = boosted_tree.fit(X, Y)
|
||||
|
||||
predictions = model.predict(data_test)
|
||||
print(predictions)
|
||||
#Note we can't really validate this data since we don't have an array of "right answers"
|
||||
predictions = model.predict(data_test)
|
||||
print(predictions)
|
||||
#Note we can't really validate this data since we don't have an array of "right answers"
|
||||
|
||||
#stochastic gradient boosting
|
||||
from sklearn.ensemble import GradientBoostingClassifier
|
||||
gradient_boosted_tree = GradientBoostingClassifier(n_estimators=50, random_state=seed)
|
||||
model2 = gradient_boosted_tree.fit(X,Y)
|
||||
#stochastic gradient boosting
|
||||
from sklearn.ensemble import GradientBoostingClassifier
|
||||
gradient_boosted_tree = GradientBoostingClassifier(n_estimators=50, random_state=seed)
|
||||
model2 = gradient_boosted_tree.fit(X,Y)
|
||||
|
||||
predictions2 = model2.predict(data_test)
|
||||
print(predictions2)
|
||||
`
|
||||
predictions2 = model2.predict(data_test)
|
||||
print(predictions2)
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -8,23 +8,26 @@ localeTitle: تحويل بين راديان ودرجات
|
||||
|
||||
يمكن استخدام الصيغ التالية للتحويل بين الراديان والدرجات:
|
||||
|
||||
`r = d * (π / 180)
|
||||
```
|
||||
r = d * (π / 180)
|
||||
|
||||
d = r * (180 / π)
|
||||
d = r * (180 / π)
|
||||
|
||||
where r is the angle in radians and d is the angle in degrees.
|
||||
`
|
||||
where r is the angle in radians and d is the angle in degrees.
|
||||
```
|
||||
|
||||
### أمثلة
|
||||
|
||||
تحويل 2π / 3 راديان إلى درجات:
|
||||
|
||||
`2π/3 * 180/π = 360π/3π = 360/3 = 120 degrees
|
||||
`
|
||||
```
|
||||
2π/3 * 180/π = 360π/3π = 360/3 = 120 degrees
|
||||
```
|
||||
|
||||
تحويل 30 درجة إلى راديان:
|
||||
|
||||
`30 * π/180 = 30π/180 = π/6 or (1/6)π radians
|
||||
```
|
||||
30 * π/180 = 30π/180 = π/6 or (1/6)π radians
|
||||
|
||||
Note: Radians are usually expressed in terms of π instead of a rounded decimal as this form represents the actual value rather than an approximation.
|
||||
`
|
||||
Note: Radians are usually expressed in terms of π instead of a rounded decimal as this form represents the actual value rather than an approximation.
|
||||
```
|
@ -22,10 +22,11 @@ localeTitle: تحويل مباشرة من ثنائي إلى سداسي عشري
|
||||
|
||||
تحويل الرقم الثنائي 01101000000001 إلى رقم سداسي عشري.
|
||||
|
||||
`1. 01101000000001 => 01|1010|0000|0001
|
||||
2. 01|1010|0000|0001 => 0001|1010|0000|0001
|
||||
3. 0001|1010|0000|0001 => 1A01
|
||||
`
|
||||
```
|
||||
1. 01101000000001 => 01|1010|0000|0001
|
||||
2. 01|1010|0000|0001 => 0001|1010|0000|0001
|
||||
3. 0001|1010|0000|0001 => 1A01
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -14,40 +14,42 @@ localeTitle: تحويل من عشري إلى ثنائي
|
||||
|
||||
تحويل الرقم العشري 30 إلى ثنائي.
|
||||
|
||||
`30 / 2 = 15 r 0
|
||||
15 / 2 = 7 r 1
|
||||
7 / 2 = 3 r 1
|
||||
3 / 2 = 1 r 1
|
||||
1 / 2 = 0 r 1
|
||||
```
|
||||
30 / 2 = 15 r 0
|
||||
15 / 2 = 7 r 1
|
||||
7 / 2 = 3 r 1
|
||||
3 / 2 = 1 r 1
|
||||
1 / 2 = 0 r 1
|
||||
|
||||
Writing out the remainders bottom to top gives you the bit pattern:
|
||||
Writing out the remainders bottom to top gives you the bit pattern:
|
||||
|
||||
11110
|
||||
11110
|
||||
|
||||
Checking your answer by converting the binary number back to decimal:
|
||||
Checking your answer by converting the binary number back to decimal:
|
||||
|
||||
(1*2^4)+(1*2^3)+(1*2^2)+(1*2^1)+(0*2^0) = 30
|
||||
(1*2^4)+(1*2^3)+(1*2^2)+(1*2^1)+(0*2^0) = 30
|
||||
|
||||
So your answer is correct.
|
||||
`
|
||||
So your answer is correct.
|
||||
```
|
||||
|
||||
تحويل الرقم العشري 116 إلى ثنائي.
|
||||
|
||||
`116 / 2 = 58 r 0
|
||||
58 / 2 = 29 r 0
|
||||
29 / 2 = 14 r 1
|
||||
14 / 2 = 7 r 0
|
||||
7 / 2 = 3 r 1
|
||||
3 / 2 = 1 r 1
|
||||
1 / 2 = 0 r 1
|
||||
```
|
||||
116 / 2 = 58 r 0
|
||||
58 / 2 = 29 r 0
|
||||
29 / 2 = 14 r 1
|
||||
14 / 2 = 7 r 0
|
||||
7 / 2 = 3 r 1
|
||||
3 / 2 = 1 r 1
|
||||
1 / 2 = 0 r 1
|
||||
|
||||
Writing out the remainders bottom to top gives you the bit pattern:
|
||||
Writing out the remainders bottom to top gives you the bit pattern:
|
||||
|
||||
1110100
|
||||
1110100
|
||||
|
||||
Checking your answer by converting the binary number back to decimal:
|
||||
Checking your answer by converting the binary number back to decimal:
|
||||
|
||||
(1*2^6)+(1*2^5)+(1*2^4)+(0*2^3)+(1*2^2)+(0*2^1)+(0*2^0) = 116
|
||||
(1*2^6)+(1*2^5)+(1*2^4)+(0*2^3)+(1*2^2)+(0*2^1)+(0*2^0) = 116
|
||||
|
||||
So your answer is correct.
|
||||
`
|
||||
So your answer is correct.
|
||||
```
|
@ -14,13 +14,15 @@ Centi- (رمز c) هي بادئة وحدة في النظام المتري تدل
|
||||
|
||||
في الصيغة التالية ، يتم تصنيف الوحدات مع أقواس \[\] حولها
|
||||
|
||||
`[cm] / 100 = [m]
|
||||
`
|
||||
```
|
||||
[cm] / 100 = [m]
|
||||
```
|
||||
|
||||
إذا أدخلت القيمة التي لديك ، دعنا نقول 50 سم ، فسيتم حسابها على النحو التالي:
|
||||
|
||||
`50[cm] / 100 = 0.5[m]
|
||||
`
|
||||
```
|
||||
50[cm] / 100 = 0.5[m]
|
||||
```
|
||||
|
||||
نتيجة حساب إرجاع قيمة 0.5 متر ، فإن كمية متر 50 سنتيمتر هو.
|
||||
|
||||
@ -32,16 +34,17 @@ Centi- (رمز c) هي بادئة وحدة في النظام المتري تدل
|
||||
|
||||
### الترميز
|
||||
|
||||
`function convertCentimeterToMeter (cm) {
|
||||
```js
|
||||
function convertCentimeterToMeter (cm) {
|
||||
return ( cm / 100 );
|
||||
}
|
||||
}
|
||||
|
||||
// Set some example measurements
|
||||
var lengthInCm = 300;
|
||||
var lengthInM;
|
||||
// Set some example measurements
|
||||
var lengthInCm = 300;
|
||||
var lengthInM;
|
||||
|
||||
lengthInM = convertCentimeterToMeter(lengthInCm); // 3
|
||||
`
|
||||
lengthInM = convertCentimeterToMeter(lengthInCm); // 3
|
||||
```
|
||||
|
||||
### معلومات اكثر:
|
||||
|
||||
|
@ -19,10 +19,12 @@ localeTitle: تحويل وحدات دقيقة إلى ساعات
|
||||
|
||||
التحويل من الوقت بالدقائق إلى الوقت بالساعة:
|
||||
|
||||
`90 minutes = (90 / 60) hours = 1.5 hours
|
||||
`
|
||||
```
|
||||
90 minutes = (90 / 60) hours = 1.5 hours
|
||||
```
|
||||
|
||||
التحويل من الوقت بالساعة إلى الوقت بالدقائق:
|
||||
|
||||
`24 hours = (24 * 60) minutes = 1440 minutes
|
||||
`
|
||||
```
|
||||
24 hours = (24 * 60) minutes = 1440 minutes
|
||||
```
|
@ -22,10 +22,11 @@ localeTitle: تركيبات
|
||||
|
||||
تعد التوليفات مفيدة جدًا عندما تريد حل المشكلات التجميعية مثل المشاكل التالية:
|
||||
|
||||
`Compute the probability to obtain a poker from
|
||||
a standard fifty-two card deck drawing 5 cards
|
||||
at the same time
|
||||
`
|
||||
```
|
||||
Compute the probability to obtain a poker from
|
||||
a standard fifty-two card deck drawing 5 cards
|
||||
at the same time
|
||||
```
|
||||
|
||||
من أجل حل هذه المشكلة البسيطة ، تحتاج إلى حساب عدد 5 أيدي بطاقة ممكن باستخدام مجموعات:
|
||||
|
||||
|
@ -30,37 +30,41 @@ private int CalculatePoweredArray (int int، int \[\] arr) { var poweredArray =
|
||||
|
||||
}
|
||||
|
||||
`Calling the function with a power of 3 will give these results:
|
||||
[1, 8, 27, 64, 125]
|
||||
```
|
||||
Calling the function with a power of 3 will give these results:
|
||||
[1, 8, 27, 64, 125]
|
||||
|
||||
Documentation reference: <a href='https://msdn.microsoft.com/en-us/library/system.math(v=vs.110' target='_blank' rel='nofollow'>MSDN</a>.aspx)
|
||||
Documentation reference: <a href='https://msdn.microsoft.com/en-us/library/system.math(v=vs.110' target='_blank' rel='nofollow'>MSDN</a>.aspx)
|
||||
|
||||
#### JavaScript
|
||||
With Node.js
|
||||
`
|
||||
#### JavaScript
|
||||
With Node.js
|
||||
```
|
||||
|
||||
جافا سكريبت var math = requires ('mathjs')؛
|
||||
|
||||
`In the browser
|
||||
`
|
||||
```
|
||||
In the browser
|
||||
```
|
||||
|
||||
أتش تي أم أل
|
||||
|
||||
// use the math.js libary math.sqrt(-4); // result: 2i
|
||||
|
||||
`Documentation reference: <a href='http://mathjs.org/docs/index.html' target='_blank' rel='nofollow'>Math.js documentation</a>
|
||||
```
|
||||
Documentation reference: <a href='http://mathjs.org/docs/index.html' target='_blank' rel='nofollow'>Math.js documentation</a>
|
||||
|
||||
#### C++
|
||||
`
|
||||
#### C++
|
||||
```
|
||||
|
||||
حزب الشعب الكمبودي
|
||||
|
||||
# تتضمن
|
||||
|
||||
`Documentation reference: <a href='http://www.cplusplus.com/reference/cmath/' target='_blank' rel='nofollow'>cplusplus reference</a>
|
||||
```
|
||||
Documentation reference: <a href='http://www.cplusplus.com/reference/cmath/' target='_blank' rel='nofollow'>cplusplus reference</a>
|
||||
|
||||
#### Python
|
||||
`
|
||||
#### Python
|
||||
```
|
||||
|
||||
الثعبان
|
||||
|
||||
@ -73,10 +77,11 @@ private int CalculatePoweredArray (int int، int \[\] arr) { var poweredArray =
|
||||
|
||||
> > > استيراد numpy كما np np.zeros ((3،4))
|
||||
|
||||
`This returns a 3x4 array populated with 0s.
|
||||
```
|
||||
This returns a 3x4 array populated with 0s.
|
||||
|
||||
#### Java
|
||||
`
|
||||
#### Java
|
||||
```
|
||||
|
||||
جافا استيراد java.lang.Math
|
||||
|
||||
|
@ -14,12 +14,13 @@ _هنا في المثال المتغير b هو القاعدة بينما الم
|
||||
|
||||
مثال على سجلات في بيثون:
|
||||
|
||||
`import math
|
||||
```python
|
||||
import math
|
||||
|
||||
# math.log(value, base) - outputs exponent
|
||||
math.log(100, 10) #outputs 2
|
||||
math.log(2, 2) #outputs 1
|
||||
`
|
||||
# math.log(value, base) - outputs exponent
|
||||
math.log(100, 10) #outputs 2
|
||||
math.log(2, 2) #outputs 1
|
||||
```
|
||||
|
||||
#### مصادر:
|
||||
|
||||
|
@ -6,54 +6,59 @@ localeTitle: يعني متوسط الوضع والمدى
|
||||
|
||||
يستخدم الإحصائيون وعلماء الرياضيات المتوسط والوسيط والوضع والنطاق لمعرفة معلومات حول مجموعة من الأرقام.
|
||||
|
||||
`Example set:
|
||||
```
|
||||
Example set:
|
||||
|
||||
5, -4, 11, 5, 5, 20, 8.5, 11
|
||||
`
|
||||
5, -4, 11, 5, 5, 20, 8.5, 11
|
||||
```
|
||||
|
||||
لحساب **نطاق** مجموعة ، خذ الرقم الأكبر ، والرمز x ، وأقل عدد ، والرمز y ، وحساب xy. سيعطي النطاق إشارة إلى مدى انتشار الأرقام.
|
||||
|
||||
`Smallest value: -4
|
||||
Largest value: 20
|
||||
```
|
||||
Smallest value: -4
|
||||
Largest value: 20
|
||||
|
||||
20 - (-4) = 24
|
||||
20 - (-4) = 24
|
||||
|
||||
The range is 24
|
||||
`
|
||||
The range is 24
|
||||
```
|
||||
|
||||
لحساب **المتوسط** ، أضف جميع الأرقام معًا وانقسم على إجمالي عدد العناصر في المجموعة. هذا هو المقصود عادة عند مناقشة "المتوسط".
|
||||
|
||||
`5 + (-4) + 11 + 5 + 5 + 20 + 8.5 + 11 = 61.5
|
||||
```
|
||||
5 + (-4) + 11 + 5 + 5 + 20 + 8.5 + 11 = 61.5
|
||||
|
||||
Sum: 61.5
|
||||
Count: 8
|
||||
Sum: 61.5
|
||||
Count: 8
|
||||
|
||||
61.5 / 8 = 7.6875
|
||||
61.5 / 8 = 7.6875
|
||||
|
||||
The mean is 7.6875
|
||||
`
|
||||
The mean is 7.6875
|
||||
```
|
||||
|
||||
لحساب **الوضع** ، ابحث عن الرقم الذي يتم تكراره بشكل متكرر. على سبيل المثال ، بالنسبة للأعداد 1،2،3،4،5،6،7،7،7 سيكون الوضع 7 لأن هناك ثلاثة 7s في المجموعة ، وهو أعلى من أي رقم آخر.
|
||||
|
||||
`Put the set in order so it's easier to see how
|
||||
many of each value there are:
|
||||
```
|
||||
Put the set in order so it's easier to see how
|
||||
many of each value there are:
|
||||
|
||||
-4, 5, 5, 5, 8.5, 11, 11, 20
|
||||
-4, 5, 5, 5, 8.5, 11, 11, 20
|
||||
|
||||
5 appears three times, 11 appears twice and
|
||||
everything else appears once.
|
||||
5 appears three times, 11 appears twice and
|
||||
everything else appears once.
|
||||
|
||||
The mode is 5
|
||||
`
|
||||
The mode is 5
|
||||
```
|
||||
|
||||
لحساب **المتوسط** ، قم بترتيب كافة الأرقام بترتيب متزايد وقم بتخطي أعلى وأعلى رقم حتى يظهر رقم واحد أو رقمين فقط. إذا كان هناك رقم واحد متبقٍ ، فهذا الرقم هو الوسيط. إذا كان هناك رقمان ، فقم بإضافة رقمين ثم قسّم على 2 للحصول على الوسيط. على سبيل المثال ، في 1،2،3،4،5،6،7،7،7 سيكون المتوسط 5.
|
||||
|
||||
`First, put the set in order:
|
||||
```
|
||||
First, put the set in order:
|
||||
|
||||
-4, 5, 5, 5, 8.5, 11, 11, 20
|
||||
-4, 5, 5, 5, 8.5, 11, 11, 20
|
||||
|
||||
The third 5 and 8.5 are the middle values...
|
||||
(5 + 8.5) / 2 = 6.75
|
||||
The third 5 and 8.5 are the middle values...
|
||||
(5 + 8.5) / 2 = 6.75
|
||||
|
||||
The median is 6.75
|
||||
`
|
||||
The median is 6.75
|
||||
```
|
@ -8,15 +8,15 @@ Font Awesome هي مكتبة ملائمة من الرموز. هذه الرموز
|
||||
|
||||
هيريس كيف تضيف أيقونة:
|
||||
|
||||
`
|
||||
```html
|
||||
<i class="fa fa-thumbs-up"></i>
|
||||
`
|
||||
```
|
||||
|
||||
إليك كيفية إدراج هذا الرمز على زر:
|
||||
|
||||
`
|
||||
```html
|
||||
<button class="btn btn-block btn-primary"><i class="fa fa-thumbs-up"></i> Like</button>
|
||||
`
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -13,10 +13,11 @@ localeTitle: تكبير الحرف الأول من سلسلة
|
||||
|
||||
يجب عليك استخدام طريقة [charAt ()](http://forum.freecodecamp.com/t/javascript-string-prototype-charat/15932) ، في _الفهرس 0_ ، لتحديد الحرف الأول من السلسلة.
|
||||
|
||||
`var string = "freeCodecamp";
|
||||
```javascript
|
||||
var string = "freeCodecamp";
|
||||
|
||||
string.charAt(0); // Returns "f"
|
||||
`
|
||||
string.charAt(0); // Returns "f"
|
||||
```
|
||||
|
||||
> ملاحظة: يفضل استخدام `charAt` `[ ]` ( [تدوين قوس](http://forum.freecodecamp.com/t/javascript-string-prototype-touppercase/15950) ) باسم `str.charAt(0)` إرجاع سلسلة فارغة ( _`''`_ ) لـ `str = ''` بدلاً من `undefined` في حالة `''[0]` .
|
||||
|
||||
@ -24,48 +25,52 @@ localeTitle: تكبير الحرف الأول من سلسلة
|
||||
|
||||
يمكنك استخدام أسلوب [toUpperCase ()](http://forum.freecodecamp.com/t/javascript-string-prototype-touppercase/15950) وتحويل سلسلة الاستدعاء إلى الحالة العليا.
|
||||
|
||||
`var string = "freeCodecamp";
|
||||
```javascript
|
||||
var string = "freeCodecamp";
|
||||
|
||||
string.charAt(0).toUpperCase(); // Returns "F"
|
||||
`
|
||||
string.charAt(0).toUpperCase(); // Returns "F"
|
||||
```
|
||||
|
||||
## 3\. الحصول على البقية من السلسلة
|
||||
|
||||
يمكنك استخدام طريقة [شريحة ()](https://github.com/freecodecamp/freecodecamp/wiki/js-array-prototype-slice) والحصول على الباقي من السلسلة (من الحرف الثاني ، _الفهرس 1_ ، إلى نهاية السلسلة).
|
||||
|
||||
`var string = "freeCodecamp";
|
||||
```javascript
|
||||
var string = "freeCodecamp";
|
||||
|
||||
string.slice(1); // Returns "reeCodecamp"
|
||||
`
|
||||
string.slice(1); // Returns "reeCodecamp"
|
||||
```
|
||||
|
||||
## 4\. قم بإرجاع النتيجة بإضافة الحرف الأول وبقية السلسلة
|
||||
|
||||
يجب إنشاء دالة تقبل سلسلة كوسيطة فقط وترجع سلسلة الأحرف الأولى `string.charAt(0).toUpperCase()` والباقي من السلسلة `string.slice(1)` .
|
||||
|
||||
`var string = "freeCodecamp";
|
||||
```javascript
|
||||
var string = "freeCodecamp";
|
||||
|
||||
function capitalizeFirstLetter(str) {
|
||||
function capitalizeFirstLetter(str) {
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
}
|
||||
}
|
||||
|
||||
capitalizeFirstLetter(string); // Returns "FreeCodecamp"
|
||||
`
|
||||
capitalizeFirstLetter(string); // Returns "FreeCodecamp"
|
||||
```
|
||||
|
||||
أو يمكنك إضافة هذه الوظيفة إلى `String.prototype` لاستخدامها مباشرةً على سلسلة باستخدام التعليمة البرمجية التالية ( _بحيث لا يمكن حساب هذه الطريقة ولكن يمكن استبدالها أو حذفها لاحقًا_ ):
|
||||
|
||||
`var string = "freeCodecamp";
|
||||
```javascript
|
||||
var string = "freeCodecamp";
|
||||
|
||||
/* this is how methods are defined in prototype of any built-in Object */
|
||||
Object.defineProperty(String.prototype, 'capitalizeFirstLetter', {
|
||||
/* this is how methods are defined in prototype of any built-in Object */
|
||||
Object.defineProperty(String.prototype, 'capitalizeFirstLetter', {
|
||||
value: function () {
|
||||
return this.charAt(0).toUpperCase() + this.slice(1);
|
||||
},
|
||||
writable: true, // so that one can overwrite it later
|
||||
configurable: true // so that it can be deleted later
|
||||
});
|
||||
});
|
||||
|
||||
string.capitalizeFirstLetter(); // Returns "FreeCodecamp"
|
||||
`
|
||||
string.capitalizeFirstLetter(); // Returns "FreeCodecamp"
|
||||
```
|
||||
|
||||
### مصدر
|
||||
|
||||
|
@ -22,7 +22,8 @@ localeTitle: كيفية إعادة توجيه صفحة ويب
|
||||
</form>
|
||||
`
|
||||
|
||||
`There is another option if you just want to change the page as soon as they reach that page:
|
||||
`
|
||||
```
|
||||
There is another option if you just want to change the page as soon as they reach that page:
|
||||
```
|
||||
|
||||
جافا سكريبت window.location.assign ( "HTTPS: //www.yournewwebsite.fakewebsite")؛ \`\` \` استبدال موقع الويب بموقعك على الويب. ينبغي للمرء أن يذهب داخل ملف جافا سكريبت.
|
@ -30,9 +30,9 @@ localeTitle: HTML و CSS Cheat Sheet
|
||||
|
||||
جرب قيمًا مختلفة لمعرفة كيفية تأثيرها على div وأكثر في html
|
||||
|
||||
`
|
||||
```html
|
||||
<div id="divName" class="container-fluid">
|
||||
`
|
||||
```
|
||||
|
||||
## محاذاة عمودية (لسطر واحد من النص)
|
||||
|
||||
|
@ -6,15 +6,17 @@ localeTitle: تعرف على Jsonp
|
||||
|
||||
JSONP لتقف على "JSON مع الحشو". لنفترض أنك تريد تقديم طلبات AJAX إلى نطاق مختلف. حسنا ، لا يمكنك القيام بذلك مع XMLHttpRequest ، كما تفعل عادة ، ولكن يمكنك القيام بذلك مع علامات البرنامج النصي ، كما رأينا [على StackOverflow](https://stackoverflow.com/questions/2067472/what-is-jsonp-all-about) :
|
||||
|
||||
`script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = 'http://www.someWebApiServer.com/some-data';
|
||||
`
|
||||
```javascript
|
||||
script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = 'http://www.someWebApiServer.com/some-data';
|
||||
```
|
||||
|
||||
ولكن هذا قبيح ، والآن لدينا للحصول على عناصر من JSON من علامة النصي ، الإجمالي. لحسن الحظ ، كان منشئو JSONP يفكرون في المستقبل ، لذا بدلاً من وضع نصوصنا كما فعلنا أعلاه ، نقوم بذلك:
|
||||
|
||||
`script.src = 'http://www.someWebApiServer.com/some-data?callback=my_callback';
|
||||
`
|
||||
```javascript
|
||||
script.src = 'http://www.someWebApiServer.com/some-data?callback=my_callback';
|
||||
```
|
||||
|
||||
يؤدي هذا إلى معاودة الاتصال التلقائي بعد تحميل البيانات ، مما يؤدي إلى إنشاء وظيفة بالبيانات المطلوبة داخلها.
|
||||
|
||||
|
@ -8,17 +8,19 @@ localeTitle: اختبار مع Chaijs
|
||||
|
||||
يمكنك تثبيت Chai في مشروعك من خلال npm.
|
||||
|
||||
`npm install chai
|
||||
`
|
||||
```
|
||||
npm install chai
|
||||
```
|
||||
|
||||
##### المؤيدة للطرف
|
||||
|
||||
إضافة Chai في devDependencies of _package.json_ ، باستخدام \* كعلامة إصدار. بهذه الطريقة ، لديك دائمًا أحدث إصدار.
|
||||
|
||||
`"devDependencies": {
|
||||
```
|
||||
"devDependencies": {
|
||||
"chai": "*"
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### كيف تستعمل
|
||||
|
||||
|
@ -14,10 +14,11 @@ localeTitle: إعداد تطوير تطبيق Cordova iOS للنشر
|
||||
|
||||
ابدأ بفتح الوحدة الطرفية وإنشاء مشروع Cordova جديد (استخدم sudo فقط إذا كان لديك مشكلات في الإذن ، أي أخطاء EACCESS):
|
||||
|
||||
`sudo cordova create iosdemo
|
||||
cd iosdemo
|
||||
sudo cordova platform add ios
|
||||
`
|
||||
```
|
||||
sudo cordova create iosdemo
|
||||
cd iosdemo
|
||||
sudo cordova platform add ios
|
||||
```
|
||||
|
||||
في وقت كتابة هذا الدليل ، فإن هذا الإصدار من منصة Cordova iOS هو: 4.3.1
|
||||
|
||||
@ -25,13 +26,15 @@ localeTitle: إعداد تطوير تطبيق Cordova iOS للنشر
|
||||
|
||||
الخطوة التالية هي لتشغيل الأمر بناء كوردوفا. سيؤدي هذا إلى تحويل شفرة التطبيق إلى ملف .xcodeproj الذي سنستخدمه بعد ذلك.
|
||||
|
||||
`sudo cordova build ios
|
||||
`
|
||||
```
|
||||
sudo cordova build ios
|
||||
```
|
||||
|
||||
سيكون ملف مشروع Xcode الذي تم إنشاؤه في:
|
||||
|
||||
`[Your App Folder]/platforms/ios/[Your App Name].xcodeproj
|
||||
`
|
||||
```
|
||||
[Your App Folder]/platforms/ios/[Your App Name].xcodeproj
|
||||
```
|
||||
|
||||
الآن في حالة حدوث Android ، يتم توقيع الشفرة باستخدام ملف Keystore بتنسيق jj. ومع ذلك ، في حالة ركاب iOS لتوزيع تطبيقات iOS ، يجب أن يكون لديك حساب مطوّر برامج Apple ، هذا حتى نتمكن من إنشاء _الشهادات_ _وملفات التعريف الاحتياطية_ اللازمة لتوزيع التطبيق.
|
||||
|
||||
|
@ -12,19 +12,21 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
||||
|
||||
قم بإنشاء مجلد فارغ pushSample
|
||||
|
||||
`cd '/opt/lampp/htdocs'
|
||||
mkdir pushSample
|
||||
cd pushSample
|
||||
cordova create pushSample
|
||||
cd pushSample
|
||||
cordova platform add android
|
||||
cordova plugin add cordova-plugin-FCM
|
||||
`
|
||||
```
|
||||
cd '/opt/lampp/htdocs'
|
||||
mkdir pushSample
|
||||
cd pushSample
|
||||
cordova create pushSample
|
||||
cd pushSample
|
||||
cordova platform add android
|
||||
cordova plugin add cordova-plugin-FCM
|
||||
```
|
||||
|
||||
أثناء إضافة المكوّن الإضافي Cordova FCM ، سيظهر خطأ:
|
||||
|
||||
`Error: cordova-plugin-fcm: You have installed platform android but file 'google-services.json' was not found in your Cordova project root folder.
|
||||
`
|
||||
```
|
||||
Error: cordova-plugin-fcm: You have installed platform android but file 'google-services.json' was not found in your Cordova project root folder.
|
||||
```
|
||||
|
||||
ملاحظة: يرجع ذلك إلى أننا لم نضف ملف google-services.json الذي يجب إنشاؤه في الخطوات التالية.
|
||||
|
||||
@ -36,8 +38,9 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
||||
|
||||
في النموذج المنبثق التالي ، املأ التفاصيل كما يلي: **اسم حزمة Android: اسم** الحزمة أو معرفها هو المعرف الفريد لأحد التطبيقات في متجر Play. لاحظ أنها قيمة مهمة جدًا لا يمكن تغييرها لأحد التطبيقات بمجرد تحميلها إلى متجر Play. سيكون في بناء جملة اسم النطاق العكسي: على سبيل المثال ، سيكون لدى hello.pushSample.com معرف التطبيق: com.pushSample.hello. أيضا في ملف **config.xml** في مشروع كوردوفا الخاص بك تعيين معرف التطبيق نفسه. لمشروع العينة لدينا سيكون في: pushSample / pushSample / config.xml على سبيل المثال بالنسبة لي محتويات هذا الملف هي:
|
||||
|
||||
`<?xml version='1.0' encoding='utf-8'?>
|
||||
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
```xml
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
<name>HelloCordova</name>
|
||||
<description>
|
||||
A sample Apache Cordova application that responds to the deviceready event.
|
||||
@ -61,13 +64,14 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
||||
<allow-intent href="itms:*" />
|
||||
<allow-intent href="itms-apps:*" />
|
||||
</platform>
|
||||
</widget>
|
||||
`
|
||||
</widget>
|
||||
```
|
||||
|
||||
لاحظ العلامة
|
||||
|
||||
`<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
`
|
||||
```xml
|
||||
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
```
|
||||
|
||||
هنا هوية السمة هو **معرف** حزمة والتي سوف يكون افتراضيا **io.cordova.hellocordova** تغييره إلى معرف التطبيق الذي قمت بتحديده في وحدة تحكم firebase. سوف أستخدم com.pushSample.hello
|
||||
|
||||
@ -87,19 +91,22 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
||||
|
||||
بمجرد حصولك على الملف ، الصقه في المجلد الجذر لمشروع Cordova الخاص بك ، في حالتي:
|
||||
|
||||
`/opt/lampp/htdocs/pushSample/pushSample
|
||||
`
|
||||
```
|
||||
/opt/lampp/htdocs/pushSample/pushSample
|
||||
```
|
||||
|
||||
المقبل بناء المشروع
|
||||
|
||||
`cordova build android
|
||||
`
|
||||
```
|
||||
cordova build android
|
||||
```
|
||||
|
||||
بعد إضافة ملف google-services.json ، يجب أن يتم إنشاؤه بنجاح.
|
||||
|
||||
بعد ذلك ، يتعين علينا كتابة رمز جانب العميل للتعامل مع إشعارات الدفع:
|
||||
|
||||
`FCMPlugin.getToken(function(token) {
|
||||
```js
|
||||
FCMPlugin.getToken(function(token) {
|
||||
//this is the FCM token which can be used
|
||||
//to send notification to specific device
|
||||
console.log(token);
|
||||
@ -117,8 +124,8 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
||||
// alert(JSON.stringify(data));
|
||||
// }
|
||||
});
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
يقوم الرمز أولاً باستدعاء الدالة **getToken** للحصول على رمز FCM المميز من firebase ، ثم في معاودة الاتصال يقوم بتسجيل رد **اتصال** آخر على **Notification** لمعالجة ما يحدث عند تلقي إعلام الدفع.
|
||||
|
||||
@ -138,8 +145,9 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
||||
|
||||
سيظهر كائن البيانات في رد الاتصال onNotification على النحو التالي
|
||||
|
||||
`{myKey2: "valuefor2", myKey: "valuefor1", wasTapped: false}
|
||||
`
|
||||
```js
|
||||
{myKey2: "valuefor2", myKey: "valuefor1", wasTapped: false}
|
||||
```
|
||||
|
||||
لاحظ أيضًا أنه عند إرسال إشعارات الدفع باستخدام واجهات برمجة تطبيقات REST من خادم تطبيقاتك بدلاً من ملحن إخطار Firebase ، يجب عليك استخدام البنية التالية:
|
||||
|
||||
@ -209,58 +217,68 @@ localeTitle: Firebase Cloud Messaging Integration for Cordova Hybrid Apps
|
||||
|
||||
هنا ، كما ناقشنا سابقًا ، قم بتحميل مفتاح APNs Auth الذي أنشأته في مركز عضو Apple. بعد ذلك نقوم بإعداد تطبيق جانب العميل. إنشاء مجلد جديد sampleApp في مجلد التطوير الخاص بك ، بالنسبة لي هو
|
||||
|
||||
`/Volumes/Development/
|
||||
`
|
||||
```
|
||||
/Volumes/Development/
|
||||
```
|
||||
|
||||
لذلك سيكون المجلد الجديد
|
||||
|
||||
`/Volumes/Development/pushSample
|
||||
cd /Volumes/Development/pushSample
|
||||
`
|
||||
```
|
||||
/Volumes/Development/pushSample
|
||||
cd /Volumes/Development/pushSample
|
||||
```
|
||||
|
||||
إنشاء مشروع جديد Cordova ، **ملاحظة: استخدم sudo إذا لزم الأمر**
|
||||
|
||||
`cordova create pushSample
|
||||
cd pushSample
|
||||
`
|
||||
```
|
||||
cordova create pushSample
|
||||
cd pushSample
|
||||
```
|
||||
|
||||
أضف الآن أحدث نظام iOS
|
||||
|
||||
`sudo cordova platform add ios
|
||||
`
|
||||
```
|
||||
sudo cordova platform add ios
|
||||
```
|
||||
|
||||
الآن قم بلصق ملف **Googleservice-info.plist** الذي تم تنزيله مسبقًا في المجلد الجذر لمشروع Cordova ، وهو كذلك
|
||||
|
||||
`/Volumes/Development/pushSample/pushSample
|
||||
`
|
||||
```
|
||||
/Volumes/Development/pushSample/pushSample
|
||||
```
|
||||
|
||||
إضافة البرنامج المساعد Cordova FCM.
|
||||
|
||||
`cordova plugin add cordova-plugin-fcm
|
||||
`
|
||||
```
|
||||
cordova plugin add cordova-plugin-fcm
|
||||
```
|
||||
|
||||
حدِّث معرف التطبيق الافتراضي واسم التطبيق بمعرف الحزمة الذي قررناه سابقًا أثناء تهيئة وحدة التحكم في Firebase واسم التطبيق.
|
||||
|
||||
`<widget id="com.pushSample.hello" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
```xml
|
||||
<widget id="com.pushSample.hello" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
<name>PushSample</name>
|
||||
`
|
||||
```
|
||||
|
||||
في هذه المرحلة ، سيحتوي نموذج التعليمة البرمجية على ملف app.js ، والذي يمكنك تعديله وإضافة وظائف getToken و onNotification مثل android. شفرة javascript هي نفسها لكلا المنصتين.
|
||||
|
||||
التالي تشغيل الأمر بناء cordova
|
||||
|
||||
`sudo cordova build ios
|
||||
`
|
||||
```
|
||||
sudo cordova build ios
|
||||
```
|
||||
|
||||
بمجرد نجاح أمر بناء cordova ، افتح التطبيق في xcode. للقيام بذلك ، افتح الملف xcode.proj الذي سيكون موجودًا في
|
||||
|
||||
`your_cordova_project/platforms/ios/app_name.xcodeproj
|
||||
`
|
||||
```
|
||||
your_cordova_project/platforms/ios/app_name.xcodeproj
|
||||
```
|
||||
|
||||
بالنسبة لي هو
|
||||
|
||||
`/Volumes/Development/pushSample/pushSample/platforms/ios/PushSample.xcodeproj
|
||||
`
|
||||
```
|
||||
/Volumes/Development/pushSample/pushSample/platforms/ios/PushSample.xcodeproj
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
@ -14,13 +14,15 @@ localeTitle: Nodejs- Buffer
|
||||
|
||||
هناك طرق مختلفة يمكنك إنشاء مخزن مؤقت في Node.js. يمكنك إنشاء مخزن مؤقت فارغ بحجم 10 بايت.
|
||||
|
||||
`const buf1 = Buffer.alloc(10);
|
||||
`
|
||||
```javascript
|
||||
const buf1 = Buffer.alloc(10);
|
||||
```
|
||||
|
||||
من السلاسل UTF-8-encoded ، يكون الإنشاء كالتالي:
|
||||
|
||||
`const buf2 = Buffer.from('Hello World!');
|
||||
`
|
||||
```javascript
|
||||
const buf2 = Buffer.from('Hello World!');
|
||||
```
|
||||
|
||||
هناك ترميز مقبول مختلف عند إنشاء مخزن مؤقت:
|
||||
|
||||
@ -33,8 +35,9 @@ localeTitle: Nodejs- Buffer
|
||||
|
||||
هناك ثلاث وظائف منفصلة مخصصة في API Buffer لاستخدام وإنشاء مخازن جديدة. في الأمثلة أعلاه رأينا `alloc()` ومن `from()` . والثالث هو `allocUnsafe()` .
|
||||
|
||||
`const buf3 = Buffer.allocUnsafe(10);
|
||||
`
|
||||
```javascript
|
||||
const buf3 = Buffer.allocUnsafe(10);
|
||||
```
|
||||
|
||||
عند إعادتها ، قد تحتوي هذه الوظيفة على بيانات قديمة تحتاج إلى الكتابة فوقها.
|
||||
|
||||
@ -42,40 +45,45 @@ localeTitle: Nodejs- Buffer
|
||||
|
||||
هناك تفاعلات مختلفة يمكن إجراؤها باستخدام واجهة برمجة تطبيقات Buffer. سنقوم بتغطية معظمهم هنا. دعونا نبدأ بتحويل مخزن مؤقت إلى JSON.
|
||||
|
||||
`let bufferOne = Buffer.from('This is a buffer example.');
|
||||
console.log(bufferOne);
|
||||
```javascript
|
||||
let bufferOne = Buffer.from('This is a buffer example.');
|
||||
console.log(bufferOne);
|
||||
|
||||
// Output: <Buffer 54 68 69 73 20 69 73 20 61 20 62 75 66 66 65 72 20 65 78 61 6d 70 6c 65 2e>
|
||||
// Output: <Buffer 54 68 69 73 20 69 73 20 61 20 62 75 66 66 65 72 20 65 78 61 6d 70 6c 65 2e>
|
||||
|
||||
let json = JSON.stringify(bufferOne);
|
||||
console.log(json);
|
||||
let json = JSON.stringify(bufferOne);
|
||||
console.log(json);
|
||||
|
||||
// Output: {"type": "Buffer", "data": [84,104,105,115,32,105,115,32,97,32,98,117,102,102,101,114,32,101,120,97,109,112,108,101,46]}
|
||||
`
|
||||
// Output: {"type": "Buffer", "data": [84,104,105,115,32,105,115,32,97,32,98,117,102,102,101,114,32,101,120,97,109,112,108,101,46]}
|
||||
```
|
||||
|
||||
تحدد JSON أن نوع الكائن الذي تم تحويله هو Buffer ، وبياناته. سيظهر لنا تحويل مخزن مؤقت فارغ إلى JSON أنه لا يحتوي على أي شيء سوى الأصفار.
|
||||
|
||||
`const emptyBuf = Buffer.alloc(10);
|
||||
```javascript
|
||||
const emptyBuf = Buffer.alloc(10);
|
||||
|
||||
emptyBuf.toJSON();
|
||||
emptyBuf.toJSON();
|
||||
|
||||
// Output: { "type": "Buffer", "data": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }
|
||||
`
|
||||
// Output: { "type": "Buffer", "data": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }
|
||||
```
|
||||
|
||||
لاحظ أن Buffer API يوفر أيضًا دالة مباشرة `toJSON()` لتحويل مخزن مؤقت إلى كائن JSON. لفحص حجم المخزن المؤقت ، يمكننا استخدام طريقة `length` .
|
||||
|
||||
`emptyBuf.length;
|
||||
// Output: 10
|
||||
`
|
||||
```javascript
|
||||
emptyBuf.length;
|
||||
// Output: 10
|
||||
```
|
||||
|
||||
الآن دعونا تحويل المخزن المؤقت إلى سلسلة قابلة للقراءة ، في حالتنا ، ترميز utf-8.
|
||||
|
||||
`console.log(bufferOne.toString('utf8'));
|
||||
```javascript
|
||||
console.log(bufferOne.toString('utf8'));
|
||||
|
||||
// Output: This is a buffer example.
|
||||
`
|
||||
// Output: This is a buffer example.
|
||||
```
|
||||
|
||||
`.toString()` بشكل افتراضي بتحويل مخزن مؤقت إلى سلسلة تنسيق utf-8. هذه هي الطريقة التي فك ترميز المخزن المؤقت. إذا قمت بتحديد ترميز ، يمكنك تحويل المخزن المؤقت إلى ترميز آخر
|
||||
|
||||
`console.log(bufferOne.toString('base64'));
|
||||
`
|
||||
```javascript
|
||||
console.log(bufferOne.toString('base64'));
|
||||
```
|
@ -12,29 +12,33 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
||||
|
||||
للوصول إلى فئة EventEmitter في برنامج Node.js ، يجب عليك طلب وحدة `events` من واجهة برمجة التطبيقات Node.js. لإنشاء الكائن ، نقوم بإنشاء مثيل لفئة EventEmitter من خلال استدعاء دالة منشئه.
|
||||
|
||||
`const events = require('events');
|
||||
```js
|
||||
const events = require('events');
|
||||
|
||||
const eventEmitter = new events.EventEmitter();
|
||||
`
|
||||
const eventEmitter = new events.EventEmitter();
|
||||
```
|
||||
|
||||
أو يمكنك مباشرة الوصول إلى فئة فرعية EventEmitter مثل:
|
||||
|
||||
`const EventEmitter = require('events');
|
||||
```js
|
||||
const EventEmitter = require('events');
|
||||
|
||||
const eventEmitter = new EventEmitter();
|
||||
`
|
||||
const eventEmitter = new EventEmitter();
|
||||
```
|
||||
|
||||
توفر فئة EventEmitter العديد من الأساليب المحددة مسبقًا للعمل مع الأحداث. هذه الأساليب هي `.on` و `.emit` و `.error` . يمكن إجراء بث لحدث من دالة مما يؤدي إلى وظيفة رد اتصال يمكن الوصول إليها من خلال أي وظيفة أخرى في JavaScript. هذا مثل البث.
|
||||
|
||||
يمكن تنفيذ القدرة على تشغيل حدث باتباع البنية:
|
||||
|
||||
`eventEmitter.emit(eventName, optionalData);
|
||||
`
|
||||
```js
|
||||
eventEmitter.emit(eventName, optionalData);
|
||||
```
|
||||
|
||||
ويتم ذلك القدرة على إرفاق ظيفة المستمع وتحديد اسم الحدث المحدد الذي `.on` .
|
||||
|
||||
`eventEmitter.emit(eventName, callback);
|
||||
`
|
||||
```js
|
||||
eventEmitter.emit(eventName, callback);
|
||||
```
|
||||
|
||||
سنقوم بمحاكاة الوظائف الجديدة التي تعلمناها للتو مع مثال. قم بإنشاء ملف جديد يسمى `eventemitter.js` وقم بلصق التعليمة البرمجية التالية:
|
||||
|
||||
@ -54,9 +58,10 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
||||
|
||||
الآن قم بتشغيل المثال أعلاه باستخدام الأمر `node` ويجب أن تحصل على الإخراج التالي.
|
||||
|
||||
`callback runs
|
||||
callback runs
|
||||
`
|
||||
```shell
|
||||
callback runs
|
||||
callback runs
|
||||
```
|
||||
|
||||
نبدأ من خلال خلق مثيل eventEmitter نستطيع من خلالها الحصول على `.on` هذه الطريقة. تضيف طريقة `.on` الحدث عن طريق تحديد `invoke` الاسم الذي نستخدمه لاحقًا في `.emit` للاتصال باستدعاء وظيفة رد الاتصال المرتبطة به.
|
||||
|
||||
@ -78,8 +83,9 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
||||
|
||||
انتاج |
|
||||
|
||||
`callback runs
|
||||
`
|
||||
```shell
|
||||
callback runs
|
||||
```
|
||||
|
||||
`.once` الاحتفاظ بمسارات الأحداث عندما يتم تشغيلها وعدد المرات التي يتم تشغيلها بخلاف طريقة `.on` التي لا تتبع مثل هذا المسار. هذا هو الفرق الرئيسي بين الاثنين.
|
||||
|
||||
@ -110,8 +116,9 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
||||
|
||||
يسمح لك الدفق المقروء بقراءة البيانات من المصدر. يمكن أن يكون هذا المصدر أي شيء من مخزن مؤقت أو ملف أو ما إلى ذلك. أولاً ، قم بإنشاء ملف نصي بسيط للملف الذي سنقوم من خلاله بقراءة البيانات باستخدام الدفق.
|
||||
|
||||
`I am Text file that contains data.
|
||||
`
|
||||
```text
|
||||
I am Text file that contains data.
|
||||
```
|
||||
|
||||
الآن ، قم بإنشاء ملف جديد يسمى read.js والذي سينفذ وظيفة قراءة البيانات من هذا الملف النصي باستخدام دفق مقروء.
|
||||
|
||||
@ -160,11 +167,12 @@ EventEmitters هي واحدة من الأفكار الأساسية وراء بن
|
||||
|
||||
إذا أردنا كتابة المثال أعلاه باستخدام الأنبوب ، فسوف نكتب كما يلي:
|
||||
|
||||
`const fs = require('fs');
|
||||
const readableStream = fs.createReadStream('./abc.txt');
|
||||
const writeableStream = fs.createWriteStream('./dest.txt');
|
||||
```js
|
||||
const fs = require('fs');
|
||||
const readableStream = fs.createReadStream('./abc.txt');
|
||||
const writeableStream = fs.createWriteStream('./dest.txt');
|
||||
|
||||
readableStream.pipe(writeableStream);
|
||||
`
|
||||
readableStream.pipe(writeableStream);
|
||||
```
|
||||
|
||||
لاحظ عدد أسطر الرمز التي أزلناها. أيضا ، نحن الآن بحاجة فقط إلى مسارات الملفات المصدر والوجهة ولقراءة وكتابة البيانات التي نستخدمها `.pipe()` .
|
@ -14,11 +14,12 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
||||
|
||||
للتحقق مما إذا كان كل شيء مثبتًا بشكل صحيح ، يرجى فتح الجهاز ونوع:
|
||||
|
||||
`node --version
|
||||
v5.0.0
|
||||
npm --version
|
||||
3.5.2
|
||||
`
|
||||
```shell
|
||||
node --version
|
||||
v5.0.0
|
||||
npm --version
|
||||
3.5.2
|
||||
```
|
||||
|
||||
إذا كنت تحصل على رقم الإصدار بدلاً من خطأ ، فهذا يعني أنك قمت بتثبيت Node.js و npm بنجاح.
|
||||
|
||||
@ -38,14 +39,16 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
||||
|
||||
يحتوي ملف JSON (تدوين كائن جافا سكريبت) على كل معلومات عن أي مشروع Express. عدد الوحدات النمطية المثبتة ، واسم المشروع ، والإصدار ، وغيرها من معلومات التعريف. لإضافة Expressjs كوحدة نمطية في مشروعنا ، نحتاج أولاً إلى إنشاء دليل مشروع ثم إنشاء ملف package.json.
|
||||
|
||||
`mkdir express-app-example
|
||||
cd express-app-example
|
||||
npm init --yes
|
||||
`
|
||||
```shell
|
||||
mkdir express-app-example
|
||||
cd express-app-example
|
||||
npm init --yes
|
||||
```
|
||||
|
||||
سيؤدي هذا إلى إنشاء ملف `package.json` في جذر دليل المشروع. لتثبيت أي وحدة نمطية من `npm` نحتاج إلى وجود ملف `package.json` في هذا الدليل.
|
||||
|
||||
`{
|
||||
```json
|
||||
{
|
||||
"name": "express-web-app",
|
||||
"version": "0.1.0",
|
||||
"description": "",
|
||||
@ -55,19 +58,21 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
||||
},
|
||||
"keywords": [],
|
||||
"license": "MIT"
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### تثبيت اكسبرس
|
||||
|
||||
الآن لدينا ملف `package.json` ، يمكننا تثبيت Express عن طريق تشغيل الأمر:
|
||||
|
||||
`npm install --save express
|
||||
`
|
||||
```shell
|
||||
npm install --save express
|
||||
```
|
||||
|
||||
يمكننا التأكد من أن Express قد تم تثبيته بشكل صحيح بطريقتين. أولاً ، سيكون هناك قسم جديد في ملف `package.json` يسمى `dependencies` التي يوجد تحتها Express الخاص بنا:
|
||||
|
||||
`{
|
||||
```json
|
||||
{
|
||||
"name": "express-web-app",
|
||||
"version": "0.1.0",
|
||||
"description": "",
|
||||
@ -80,8 +85,8 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
||||
"dependencies": {
|
||||
"express": "4.16.0"
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
الطريقة الثانية هي أن مجلدًا جديدًا يسمى `node_modules` ظهر فجأة في جذر دليل مشروعنا. يخزن هذا المجلد الحزم التي نثبتها محليًا في مشروعنا.
|
||||
|
||||
@ -89,18 +94,20 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
||||
|
||||
لاستخدام حزمة التثبيت الخاصة بنا لإطار Express وإنشاء تطبيق خادم بسيط ، سنقوم بإنشاء الملف ، `index.js` ، في جذر دليل مشروعنا.
|
||||
|
||||
`const express = require('express');
|
||||
const app = express();
|
||||
```javascript
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
|
||||
app.get('/', (req, res) => res.send('Hello World!'));
|
||||
app.get('/', (req, res) => res.send('Hello World!'));
|
||||
|
||||
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
||||
`
|
||||
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
||||
```
|
||||
|
||||
لبدء تشغيل الخادم ، انتقل إلى جهازك واكتب:
|
||||
|
||||
`node index.js
|
||||
`
|
||||
```shell
|
||||
node index.js
|
||||
```
|
||||
|
||||
هذا سيبدأ الخادم. سوف يستمع هذا التطبيق الحد الأدنى على المنفذ 3000. نحن نقدم طلبا من خلال متصفحنا على `http://localhost:3000` وسوف يستجيب الخادم الخاص بنا مع `Hello World` حيث يكون المتصفح هو العميل وستظهر الرسالة هناك.
|
||||
|
||||
@ -148,8 +155,9 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
||||
|
||||
يمكن أن تكون المسارات إما صفحات ويب قديمة جيدة أو نقاط نهاية REST API. في كلتا الحالتين ، يمكن تعريف بناء الجملة على أنه بناء مماثل لطريق ما على النحو التالي:
|
||||
|
||||
`app.METHOD(PATH, HANDLER);
|
||||
`
|
||||
```javascript
|
||||
app.METHOD(PATH, HANDLER);
|
||||
```
|
||||
|
||||
تساعد أجهزة التوجيه في فصل المخاوف مثل نقاط النهاية المختلفة والحفاظ على الأجزاء ذات الصلة من شفرة المصدر معًا. يساعدون في بناء كود قابل للصيانة. يتم تعريف جميع الطرق قبل استدعاء الدالة `app.listen()` . في تطبيق Express النموذجي ، `app.listen()` آخر وظيفة يتم تنفيذها.
|
||||
|
||||
@ -157,9 +165,10 @@ Express هو إطار Node.js الأكثر شيوعًا لأنه يتطلب ال
|
||||
|
||||
HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يوفر أساليب مختلفة للعميل لتقديم الطلب. يحتوي كل مسار على وظيفة hanlder على الأقل أو رد اتصال. تحدد وظيفة رد الاتصال هذه ما ستكون الاستجابة من الخادم لهذا المسار بعينه. على سبيل المثال ، يتم استخدام مسار `app.get()` لمعالجة طلبات GET وفي المقابل إرسال رسالة بسيطة كرد.
|
||||
|
||||
`// GET method route
|
||||
app.get('/', (req, res) => res.send('Hello World!'));
|
||||
`
|
||||
```javascript
|
||||
// GET method route
|
||||
app.get('/', (req, res) => res.send('Hello World!'));
|
||||
```
|
||||
|
||||
### مسارات التوجيه
|
||||
|
||||
@ -167,13 +176,14 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
دعنا نحدد نقطتي نهايتين أخريين في تطبيقنا القائم على الخادم.
|
||||
|
||||
`app.get('/home', (req, res) => {
|
||||
```javascript
|
||||
app.get('/home', (req, res) => {
|
||||
res.send('Home Page');
|
||||
});
|
||||
app.get('/about', (req, res) => {
|
||||
});
|
||||
app.get('/about', (req, res) => {
|
||||
res.send('About');
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
ضع في اعتبارك الشفرة الموضحة أعلاه كحد أدنى لموقع الويب الذي يحتوي على نقطتي نهايتين ، و `/about` أو `/home` و `/about` . إذا قدم العميل طلبًا للصفحة الرئيسية ، فسيتم الرد فقط مع `Home Page` وسيقوم `/about` بإرسال الاستجابة: `About Page` . نحن نستخدم وظيفة `res.send` لإرسال السلسلة مرة أخرى إلى العميل في حالة تحديد أي من الطريقتين المحددتين.
|
||||
|
||||
@ -181,18 +191,20 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
تسمى معلمات المسار شرائح عناوين URL التي يتم استخدامها لالتقاط القيم المحددة في موضعها في عنوان URL. يتم استخدام كائن `req.params` في هذه الحالة لأنه لديه حق الوصول إلى جميع المعلمات التي تم تمريرها في عنوان url.
|
||||
|
||||
`app.get('/books/:bookId', (req, res) => {
|
||||
```javascript
|
||||
app.get('/books/:bookId', (req, res) => {
|
||||
res.send(req.params);
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
سيكون عنوان URL من العميل الوارد في شفرة المصدر أعلاه `http://localhost:3000/books/23` . يجب أن يتكون اسم معلمات المسار من أحرف (\[A-Za-z0-9\_\]). حالة استخدام عامة جدًا لمعلمة توجيه في طلبنا هي الحصول على مسار 404.
|
||||
|
||||
`// For invalid routes
|
||||
app.get('*', (req, res) => {
|
||||
```javascript
|
||||
// For invalid routes
|
||||
app.get('*', (req, res) => {
|
||||
res.send('404! This is an invalid URL.');
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
إذا بدأنا الآن الخادم من سطر الأوامر باستخدام `node index.js` وحاول زيارة عنوان URL: `http://localhost:3000/abcd` . ردا على ذلك ، سوف نحصل على رسالة 404.
|
||||
|
||||
@ -232,38 +244,41 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
لإعداد أي برامج وسيطة ، سواء كانت مخصصة أو متوفرة كوحدة نمطية في npm ، نستخدم وظيفة `app.use()` . إنها كقاعدة معلمة اختيارية واحدة واستدعاء واحد للمعلمة الإلزامية. في حالتنا ، نحن لا نستخدم مسار paramaeter اختياري.
|
||||
|
||||
`app.use((req, res, next) => {
|
||||
```javascript
|
||||
app.use((req, res, next) => {
|
||||
console.log('A new request received at ' + Date.now());
|
||||
next();
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
يتم استدعاء الدالة الوسيطة أعلاه لكل طلب يقدمه العميل. عند تشغيل الخادم ، ستلاحظ أنه بالنسبة لكل طلب متصفح في نقطة النهاية `/` ، ستتم مطالبتك برسالة في جهازك:
|
||||
|
||||
`A new request received at 1467267512545
|
||||
`
|
||||
```shell
|
||||
A new request received at 1467267512545
|
||||
```
|
||||
|
||||
يمكن استخدام وظائف الوسيطيات لمسار معين. انظر المثال أدناه:
|
||||
|
||||
`const express = require('express');
|
||||
const app = express();
|
||||
```javascript
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
|
||||
//Simple request time logger for a specific route
|
||||
app.use('/home', (req, res, next) => {
|
||||
//Simple request time logger for a specific route
|
||||
app.use('/home', (req, res, next) => {
|
||||
console.log('A new request received at ' + Date.now());
|
||||
next();
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/home', (req, res) => {
|
||||
app.get('/home', (req, res) => {
|
||||
res.send('Home Page');
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/about', (req, res) => {
|
||||
app.get('/about', (req, res) => {
|
||||
res.send('About Page');
|
||||
});
|
||||
});
|
||||
|
||||
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
||||
`
|
||||
app.listen(3000, () => console.log('Example app listening on port 3000!'));
|
||||
```
|
||||
|
||||
في هذه المرة ، سترى مطالبة مشابهة فقط عندما يطلب العميل نقطة النهاية `/home` منذ الإشارة إلى المسار في `app.use()` . لن يتم عرض أي شيء في المحطة عندما يطلب العميل نقطة النهاية `/about` .
|
||||
|
||||
@ -281,19 +296,21 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
يسمح للمطورين بمعالجة البيانات الواردة ، مثل حمولة الجسم. الحمولة هي البيانات التي نتلقاها من العميل حتى تتم معالجتها. الأكثر فائدة مع طرق POST. يتم تثبيته باستخدام:
|
||||
|
||||
`npm install --save body-parser
|
||||
`
|
||||
```shell
|
||||
npm install --save body-parser
|
||||
```
|
||||
|
||||
الاستعمال:
|
||||
|
||||
`const bodyParser = require('body-parser');
|
||||
```javascript
|
||||
const bodyParser = require('body-parser');
|
||||
|
||||
// To parse URL encoded data
|
||||
app.use(bodyParser.urlencoded({ extended: false }));
|
||||
// To parse URL encoded data
|
||||
app.use(bodyParser.urlencoded({ extended: false }));
|
||||
|
||||
// To parse json data
|
||||
app.use(bodyParser.json());
|
||||
`
|
||||
// To parse json data
|
||||
app.use(bodyParser.json());
|
||||
```
|
||||
|
||||
من المحتمل أنها واحدة من أكثر استخدامات الوسيطة من طرف ثالث في أي تطبيق اكسبرس.
|
||||
|
||||
@ -301,41 +318,47 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
يوزع رأس ملف تعريف الارتباط `req.cookies` مع كائن مرتبط بأسماء ملفات تعريف الارتباط. لتثبيته ،
|
||||
|
||||
`$ npm install --save cookie-parser
|
||||
`
|
||||
```shell
|
||||
$ npm install --save cookie-parser
|
||||
```
|
||||
|
||||
`const cookieParser = require('cookie-parser');
|
||||
app.use(cookieParser());
|
||||
`
|
||||
```javascript
|
||||
const cookieParser = require('cookie-parser');
|
||||
app.use(cookieParser());
|
||||
```
|
||||
|
||||
#### جلسة
|
||||
|
||||
تقوم وظيفة الوسيطة هذه بإنشاء وسيط جلسة مع خيارات محددة. غالبًا ما يتم استخدام جلسة في تطبيقات مثل تسجيل الدخول / التسجيل.
|
||||
|
||||
`$ npm install --save session
|
||||
`
|
||||
```shell
|
||||
$ npm install --save session
|
||||
```
|
||||
|
||||
`app.use(
|
||||
```javascript
|
||||
app.use(
|
||||
session({
|
||||
secret: 'arbitary-string',
|
||||
resave: false,
|
||||
saveUninitialized: true,
|
||||
cookie: { secure: true }
|
||||
})
|
||||
);
|
||||
`
|
||||
);
|
||||
```
|
||||
|
||||
### مورغان
|
||||
|
||||
يقوم البرنامج الوسيط مورغان بتتبع جميع الطلبات وغيرها من المعلومات المهمة اعتمادًا على تنسيق الإخراج المحدد.
|
||||
|
||||
`npm install --save morgan
|
||||
`
|
||||
```shell
|
||||
npm install --save morgan
|
||||
```
|
||||
|
||||
`const logger = require('morgan');
|
||||
// ... Configurations
|
||||
app.use(logger('common'));
|
||||
`
|
||||
```javascript
|
||||
const logger = require('morgan');
|
||||
// ... Configurations
|
||||
app.use(logger('common'));
|
||||
```
|
||||
|
||||
`common` هو حالة تنسيق مسبق يمكن استخدامها في التطبيق. هناك تنسيقات أخرى محددة مسبقًا مثل صغيرة ومبتكر ، ولكن يمكنك تحديد أنك تملك تنسيقًا مخصصًا أيضًا باستخدام معلمات السلسلة المتوفرة لنا من قِبل morgan.
|
||||
|
||||
@ -349,39 +372,44 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
بشكل افتراضي ، لا يسمح Express بخدمة الملفات الثابتة. علينا استخدام هذه الوظيفة الوسيطة. من الممارسات الشائعة في تطوير تطبيق الويب هو تخزين جميع الملفات الثابتة تحت الدليل "العام" في جذر المشروع. يمكننا تقديم هذا المجلد لخدمة ملفات ثابتة تتضمن الكتابة في ملف `index.js` :
|
||||
|
||||
`app.use(express.static('public'));
|
||||
`
|
||||
```javascript
|
||||
app.use(express.static('public'));
|
||||
```
|
||||
|
||||
الآن ، سيتم تحميل الملفات الثابتة في دليلنا العام.
|
||||
|
||||
`http://localhost:3000/css/style.css
|
||||
http://localhost:3000/images/logo.png
|
||||
http://localhost:3000/images/bg.png
|
||||
http://localhost:3000/index.html
|
||||
`
|
||||
```shell
|
||||
http://localhost:3000/css/style.css
|
||||
http://localhost:3000/images/logo.png
|
||||
http://localhost:3000/images/bg.png
|
||||
http://localhost:3000/index.html
|
||||
```
|
||||
|
||||
### أدلة ثابتة متعددة
|
||||
|
||||
لاستخدام العديد من دلائل الأصول الثابتة ، اتصل بوظيفة الوسيطة `express.static` عدة مرات:
|
||||
|
||||
`app.use(express.static('public'));
|
||||
app.use(express.static('files'));
|
||||
`
|
||||
```javascript
|
||||
app.use(express.static('public'));
|
||||
app.use(express.static('files'));
|
||||
```
|
||||
|
||||
### المسار الافتراضي البادئة
|
||||
|
||||
يمكن أيضًا توفير بادئة مسار الإصلاح كوسيطة أولى للدالة الوسيطة `express.static` . يُعرف هذا _بادئة مسار افتراضي_ لأن المسار الفعلي غير موجود في المشروع.
|
||||
|
||||
`app.use('/static', express.static('public'));
|
||||
`
|
||||
```javascript
|
||||
app.use('/static', express.static('public'));
|
||||
```
|
||||
|
||||
إذا حاولنا الآن تحميل الملفات:
|
||||
|
||||
`http://localhost:3000/static/css/style.css
|
||||
http://localhost:3000/static/images/logo.png
|
||||
http://localhost:3000/static/images/bg.png
|
||||
http://localhost:3000/static/index.html
|
||||
`
|
||||
```shell
|
||||
http://localhost:3000/static/css/style.css
|
||||
http://localhost:3000/static/images/logo.png
|
||||
http://localhost:3000/static/images/bg.png
|
||||
http://localhost:3000/static/index.html
|
||||
```
|
||||
|
||||
هذه التقنية تأتي في متناول اليدين عند توفير أدلة متعددة لخدمة ملفات ثابتة. يتم استخدام البادئات للمساعدة في التمييز بين الدلائل المتعددة.
|
||||
|
||||
@ -391,14 +419,16 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
لشرح كيفية استخدام "محرك القوالب" ، سنستخدم Pug. إنه محرك قالب قوي يوفر ميزات مثل الفلاتر ، ويشمل ، الاستيفاء ، وما إلى ذلك. لاستخدامها ، يجب علينا أولاً تثبيت كوحدة نمطية في مشروعنا باستخدام `npm` .
|
||||
|
||||
`npm install --save pug
|
||||
`
|
||||
```shell
|
||||
npm install --save pug
|
||||
```
|
||||
|
||||
سيقوم هذا الأمر بتثبيت الصلصة وللتحقق من تثبيتها بشكل صحيح ، فقط ألقي نظرة على ملف `package.json` . لاستخدامه مع تطبيقنا أولاً ، يجب علينا تعيينه كمحرك قالب وإنشاء دليل جديد ".views" حيث سنقوم بتخزين كافة الملفات المتعلقة بمحرك القالب الخاص بنا.
|
||||
|
||||
`app.set('view engine', 'pug');
|
||||
app.set('views', './views');
|
||||
`
|
||||
```javascript
|
||||
app.set('view engine', 'pug');
|
||||
app.set('views', './views');
|
||||
```
|
||||
|
||||
بما أننا نستخدم `app.set()` الذي يشير إلى التكوين داخل ملف الخادم الخاص بنا ، يجب أن `app.set()` قبل تحديد أي مسار أو وظيفة وسيطة.
|
||||
|
||||
@ -414,18 +444,19 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
لتشغيل هذه الصفحة ، سنقوم بإضافة الطريق التالي إلى طلبنا.
|
||||
|
||||
`app.get('/hello', (req, res) => {
|
||||
```javascript
|
||||
app.get('/hello', (req, res) => {
|
||||
res.render('index');
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
نظرًا لأننا قمنا بالفعل بتعيين `res.render` كمحرك القالب الخاص بنا ، فإننا في `res.render` لا نحتاج إلى توفير ملحق `.pug` . تعرض هذه الوظيفة الكود في أي ملف `.pug` إلى HTML `.pug` العميل. يمكن للمتصفحات تقديم ملفات HTML فقط. إذا قمت بتشغيل الخادم الآن ، وقمت بزيارة المسار `http://localhost:3000/hello` فسوف تشاهد إخراج `Hello World` بشكل صحيح.
|
||||
|
||||
في Pug ، يجب أن تلاحظ أننا لا نحتاج إلى كتابة علامات الإغلاق إلى العناصر كما نفعل في HTML. سيتم تقديم الكود السابق في HTML على النحو التالي:
|
||||
|
||||
`
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Hello from Pug</title>
|
||||
</head>
|
||||
@ -433,27 +464,29 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
<body>
|
||||
<p class = "greetings">Hello World!</p>
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</html>
|
||||
```
|
||||
|
||||
ميزة استخدام "محرك القوالب" على ملفات HTML الخام هو أنها توفر الدعم لتنفيذ المهام عبر البيانات. لا يمكن لـ HTML تقديم البيانات مباشرة. تشترك الأطر مثل Angular و React في هذا السلوك مع محركات القوالب.
|
||||
|
||||
يمكنك أيضًا تمرير القيم إلى محرك القالب مباشرةً من وظيفة معالج التوجيه.
|
||||
|
||||
`app.get('/', (req, res) => {
|
||||
```javascript
|
||||
app.get('/', (req, res) => {
|
||||
res.render('index', { title: 'Hello from Pug', message: 'Hello World!' });
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
للحالة أعلاه ، سيتم كتابة ملف `index.pug` بنا على النحو التالي:
|
||||
|
||||
`doctype html
|
||||
```pug
|
||||
doctype html
|
||||
html
|
||||
head
|
||||
title= title
|
||||
body
|
||||
h1= message
|
||||
`
|
||||
```
|
||||
|
||||
سيكون الإخراج نفس الحالة السابقة.
|
||||
|
||||
@ -463,7 +496,8 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
|
||||
دعونا نذهب من خلال strucutre نموذجي لتطبيق ويب عبر الإنترنت.
|
||||
|
||||
`project-root/
|
||||
```
|
||||
project-root/
|
||||
node_modules/ // This is where the packages installed are stored
|
||||
config/
|
||||
db.js // Database connection and configuration
|
||||
@ -487,6 +521,6 @@ HTTP هو بروتوكول قياسي لعميل وخادم للاتصال. يو
|
||||
routes.js // Require all routes in this and then require this file in
|
||||
app.js
|
||||
package.json
|
||||
`
|
||||
```
|
||||
|
||||
هذا هو النمط المعروف باسم MVC ، عارض عرض نموذج. ببساطة لأن نموذج قاعدة البيانات ، واجهة المستخدم الخاصة بالتطبيق ووحدات التحكم (في حالتنا ، الطرق) مكتوبة ومحفوظة في ملفات منفصلة. نمط التصميم هذا الذي يجعل أي تطبيق ويب سهل القياس إذا كنت ترغب في تقديم المزيد من المسارات أو الملفات الثابتة في المستقبل والرمز قابل للصيانة.
|
@ -10,8 +10,9 @@ localeTitle: نظام الملفات
|
||||
|
||||
من أجل تضمين وحدة نمطية ، استخدم الدالة `require()` مع اسم الوحدة.
|
||||
|
||||
`const fs = require('fs');
|
||||
`
|
||||
```javascript
|
||||
const fs = require('fs');
|
||||
```
|
||||
|
||||
الاستخدام الشائع لوحدة نظام الملفات:
|
||||
|
||||
@ -27,16 +28,17 @@ localeTitle: نظام الملفات
|
||||
|
||||
رمز Node.js لقراءة الملف من جهاز الكمبيوتر وإرجاع المحتوى إلى وحدة التحكم.
|
||||
|
||||
`const fs = require('fs');
|
||||
fs.readFile('input.txt', 'utf-8', (err, data) => {
|
||||
```javascript
|
||||
const fs = require('fs');
|
||||
fs.readFile('input.txt', 'utf-8', (err, data) => {
|
||||
if(err){
|
||||
console.log(err);
|
||||
}
|
||||
else{
|
||||
console.log("Content present in input.txt file : " + data.toString());
|
||||
}
|
||||
});
|
||||
`
|
||||
});
|
||||
```
|
||||
|
||||
يقرأ الكود أعلاه ملف _input.txt_ من جهاز الكمبيوتر ويعيد المحتوى إلى وحدة التحكم.
|
||||
|
||||
|
@ -10,24 +10,26 @@ localeTitle: HTTP
|
||||
|
||||
من أجل تضمين وحدة نمطية ، استخدم الدالة `require()` مع اسم الوحدة.
|
||||
|
||||
`const http = require('http');
|
||||
`
|
||||
```javascript
|
||||
const http = require('http');
|
||||
```
|
||||
|
||||
## Node.js كملقم ويب
|
||||
|
||||
يتم استخدام الأسلوب `createServer()` لإنشاء خادم HTTP. الوسيطة الأولى من أسلوب `res.writeHead()` هي رمز الحالة ، `200` يعني أن كل شيء على ما يرام ، والوسيطة الثانية هي كائن يحتوي على رؤوس الاستجابة.
|
||||
|
||||
`const http = require('http');
|
||||
```javascript
|
||||
const http = require('http');
|
||||
|
||||
//create a server object:
|
||||
http.createServer((req, res) => {
|
||||
//create a server object:
|
||||
http.createServer((req, res) => {
|
||||
res.writeHead(200, {'Content-Type': 'text/plain'});
|
||||
res.write('Hello World!'); //write a response to the client
|
||||
res.end(); //end the response
|
||||
}).listen(8000); //the server object listens on port 8000
|
||||
}).listen(8000); //the server object listens on port 8000
|
||||
|
||||
console.log("Server is listening on port no : 8000");
|
||||
`
|
||||
console.log("Server is listening on port no : 8000");
|
||||
```
|
||||
|
||||
### خطوات التنفيذ:
|
||||
|
||||
|
@ -19,27 +19,29 @@ Node.js هو وقت تشغيل جافا سكريبت مبني على محرك ج
|
||||
|
||||
**الثعبان**
|
||||
|
||||
`import time
|
||||
```python
|
||||
import time
|
||||
|
||||
def my_io_task():
|
||||
def my_io_task():
|
||||
time.sleep(5)
|
||||
print("done")
|
||||
|
||||
my_io_task()
|
||||
my_io_task()
|
||||
`
|
||||
my_io_task()
|
||||
my_io_task()
|
||||
```
|
||||
|
||||
**نود.جي إس**
|
||||
|
||||
`function my_io_task() {
|
||||
```node
|
||||
function my_io_task() {
|
||||
setTimeout(function() {
|
||||
console.log('done');
|
||||
}, 5000);
|
||||
}
|
||||
}
|
||||
|
||||
my_io_task();
|
||||
my_io_task();
|
||||
`
|
||||
my_io_task();
|
||||
my_io_task();
|
||||
```
|
||||
|
||||
كلاهما يشبهان لكن الوقت المستغرق في التنفيذ مختلفان. يستغرق رمز python 10 ثوانٍ لتنفيذ بينما يستغرق رمز Node.js 5 ثوانٍ فقط للتنفيذ.
|
||||
|
||||
|
@ -12,9 +12,10 @@ localeTitle: الآلية الوقائية الوطنية
|
||||
|
||||
لتثبيت `npm` لدينا لتنزيل ثنائيات Nodejs في envrionment المحلي. تتضمن ثنائيات Node.js أحدث إصدار من npm. للتحقق من ذلك:
|
||||
|
||||
`npm -v
|
||||
5.6.0
|
||||
`
|
||||
```shell
|
||||
npm -v
|
||||
5.6.0
|
||||
```
|
||||
|
||||
يوفر مدير حزمة العقدة (NPM) وظيفتين رئيسيتين -
|
||||
|
||||
@ -31,44 +32,49 @@ localeTitle: الآلية الوقائية الوطنية
|
||||
|
||||
ستصبح أي حزم مثبتة عالميًا متوفرة من سطر الأوامر. نستخدم العلامة --global أو g لتثبيت الحزم عالمياً.
|
||||
|
||||
`$ npm install uglify-js --global
|
||||
`
|
||||
```shell
|
||||
$ npm install uglify-js --global
|
||||
```
|
||||
|
||||
يمكننا سرد الحزم العالمية التي قمنا بتثبيتها باستخدام الأمر list npm.
|
||||
|
||||
`$ npm list --global
|
||||
/usr/local/lib
|
||||
├─┬ npm@5.6.0
|
||||
│ ├── abbrev@1.1.0
|
||||
│ ├── ansi-regex@2.1.1
|
||||
│ ├── ansicolors@0.3.2
|
||||
│ ├── ansistyles@0.1.3
|
||||
....................
|
||||
└─┬ uglify-js@3.0.15
|
||||
```shell
|
||||
$ npm list --global
|
||||
/usr/local/lib
|
||||
├─┬ npm@5.6.0
|
||||
│ ├── abbrev@1.1.0
|
||||
│ ├── ansi-regex@2.1.1
|
||||
│ ├── ansicolors@0.3.2
|
||||
│ ├── ansistyles@0.1.3
|
||||
....................
|
||||
└─┬ uglify-js@3.0.15
|
||||
├─┬ commander@2.9.0
|
||||
│ └── graceful-readlink@1.0.1
|
||||
└── source-map@0.5.6
|
||||
`
|
||||
```
|
||||
|
||||
ومع ذلك ، فإن المخرجات مطولة نوعًا ما. يمكننا تغيير ذلك مع الخيار --depth = 0.
|
||||
|
||||
`$ npm list -g --depth=0
|
||||
/usr/local/lib
|
||||
├── npm@5.6.0
|
||||
└── uglify-js@3.0.15
|
||||
`
|
||||
```js
|
||||
$ npm list -g --depth=0
|
||||
/usr/local/lib
|
||||
├── npm@5.6.0
|
||||
└── uglify-js@3.0.15
|
||||
```
|
||||
|
||||
### تثبيت الحزم في الوضع المحلي
|
||||
|
||||
عند تثبيت الحزم محليًا ، فأنت تفعل ذلك عادةً باستخدام ملف package.json.
|
||||
|
||||
`npm install --save express
|
||||
`
|
||||
```shell
|
||||
npm install --save express
|
||||
```
|
||||
|
||||
الآن يمكنك استخدام هذه الوحدة في ملف js الخاص بك كما يلي
|
||||
|
||||
`const express = require('express');
|
||||
`
|
||||
```js
|
||||
const express = require('express');
|
||||
```
|
||||
|
||||
وتنقسم الوحدات المحلية الى مزيد من نوعين من depenedencies: `devDepenednecies` و `dependencies` . الفرق بين هذين ، هو أن devDependencies هي وحدات مطلوبة فقط أثناء التطوير ، في حين أن التبعيات هي وحدات مطلوبة أيضا في وقت التشغيل. لحفظ تبعية باعتبارها devDependency على التثبيت ، نحتاج إلى القيام `npm install --save-dev` ، بدلاً من مجرد `npm install --save` .
|
||||
|
||||
@ -78,8 +84,9 @@ localeTitle: الآلية الوقائية الوطنية
|
||||
|
||||
للقيام بذلك ، نذكر إصدار الحزمة الذي نريد تثبيته.
|
||||
|
||||
`$ npm install underscore@1.8.2 -S
|
||||
`
|
||||
```shell
|
||||
$ npm install underscore@1.8.2 -S
|
||||
```
|
||||
|
||||
لإزالة تبعية عمومية ، استخدم `-g` flag.
|
||||
|
||||
@ -87,8 +94,9 @@ localeTitle: الآلية الوقائية الوطنية
|
||||
|
||||
npm هو مدير حزم لذا يجب أن يكون قادرًا على إزالة حزمة. يمكننا إزالة الحزمة:
|
||||
|
||||
`$ npm uninstall underscore -S
|
||||
`
|
||||
```shell
|
||||
$ npm uninstall underscore -S
|
||||
```
|
||||
|
||||
لتحديث تبعية عالمية ، استخدم `-g` flag.
|
||||
|
||||
@ -96,16 +104,18 @@ npm هو مدير حزم لذا يجب أن يكون قادرًا على إزا
|
||||
|
||||
لتحديث حزمة ، يمكنك القيام بما يلي:
|
||||
|
||||
`$ npm update underscore -S
|
||||
`
|
||||
```
|
||||
$ npm update underscore -S
|
||||
```
|
||||
|
||||
للتحقق مما إذا كان هناك تحديث متوفر لأي حزمة مرتبطة بمشروعنا:
|
||||
|
||||
`$ npm outdated
|
||||
```shell
|
||||
$ npm outdated
|
||||
|
||||
Package Current Wanted Latest Location
|
||||
underscore 1.8.2 1.8.3 1.8.3 project
|
||||
`
|
||||
Package Current Wanted Latest Location
|
||||
underscore 1.8.2 1.8.3 1.8.3 project
|
||||
```
|
||||
|
||||
يعرض العمود الحالي لنا الإصدار المثبت محليًا. يخبرنا العمود الأحدث بأحدث إصدار من الحزمة. يخبرنا العمود "مطلوب" بأحدث إصدار من الحزمة التي يمكننا الترقية إليها دون كسر الشفرة الحالية.
|
||||
|
||||
@ -115,17 +125,18 @@ npm هو مدير حزم لذا يجب أن يكون قادرًا على إزا
|
||||
|
||||
عند تثبيت الحزم محليًا ، فإنك تحتاج إلى ملف package.json. لتوليد واحدة يمكنك القيام بذلك باستخدام الأمر `npm init` . سيؤدي ذلك إلى طرح بعض الأسئلة عن طريق الضغط على Enter يمكنك الاحتفاظ بالقيم الافتراضية.
|
||||
|
||||
`$ npm init
|
||||
package name: (project)
|
||||
version: (1.0.0)
|
||||
description: Demo of package.json
|
||||
entry point: (index.js)
|
||||
test command:
|
||||
git repository:
|
||||
keywords:
|
||||
author:
|
||||
license: (ISC)
|
||||
`
|
||||
```shell
|
||||
$ npm init
|
||||
package name: (project)
|
||||
version: (1.0.0)
|
||||
description: Demo of package.json
|
||||
entry point: (index.js)
|
||||
test command:
|
||||
git repository:
|
||||
keywords:
|
||||
author:
|
||||
license: (ISC)
|
||||
```
|
||||
|
||||
فكر في `package.json` باعتباره حارس جميع التبعيات أو مظاهر مشروع Node.js. إذا كنت تريد طريقة أسرع لإنشاء ملف package.json استخدم `npm init --y` .
|
||||
|
||||
@ -162,7 +173,8 @@ npm هو مدير حزم لذا يجب أن يكون قادرًا على إزا
|
||||
|
||||
مثال:
|
||||
|
||||
`{
|
||||
```json
|
||||
{
|
||||
"name": "express",
|
||||
"description": "Fast, unopinionated, minimalist web framework",
|
||||
"version": "4.11.2",
|
||||
@ -222,86 +234,96 @@ npm هو مدير حزم لذا يجب أن يكون قادرًا على إزا
|
||||
--reporter spec --check-leaks test/ test/acceptance/"
|
||||
},
|
||||
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
## مخطوطات npm
|
||||
|
||||
`npm` البرامج النصية `npm` لأتمتة المهام المتكررة. على سبيل المثال ، بناء مشروعك ، وتقليل ملفات Cascading Style Sheets (CSS) و JavaScript (JS). تُستخدم البرامج النصية أيضًا في حذف الملفات والمجلدات المؤقتة ، إلخ. يمكن تخصيصها ويمكن الوصول إليها عبر كائن `scripts` في `package.json` .
|
||||
|
||||
`{
|
||||
```json
|
||||
{
|
||||
"name": "super-cool-package",
|
||||
"version": "1.0.0",
|
||||
"scripts": {}
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
مثال على أكثر نصوص NPM شيوعًا:
|
||||
|
||||
`"scripts": {
|
||||
```json
|
||||
"scripts": {
|
||||
"start": "node index.js",
|
||||
...
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
## npm الكاش
|
||||
|
||||
عندما تقوم npm بتثبيت حزمة فإنها تحتفظ بنسخة ، لذلك في المرة التالية التي ترغب في تثبيت هذه الحزمة ، لا تحتاج إلى الوصول إلى الشبكة. يتم تخزين النسخ مؤقتًا في الدليل .npm في المسار الرئيسي.
|
||||
|
||||
`$ ls ~/.npm
|
||||
lodash.zipobject
|
||||
log-driver
|
||||
log-symbols
|
||||
logalot
|
||||
logfmt
|
||||
loglevel
|
||||
long-timeout
|
||||
longest
|
||||
longest-strea
|
||||
`
|
||||
```shell
|
||||
$ ls ~/.npm
|
||||
lodash.zipobject
|
||||
log-driver
|
||||
log-symbols
|
||||
logalot
|
||||
logfmt
|
||||
loglevel
|
||||
long-timeout
|
||||
longest
|
||||
longest-strea
|
||||
```
|
||||
|
||||
سيصبح هذا الدليل مزدحمًا مع الحزم القديمة بمرور الوقت ، لذلك من المفيد تنظيفه في بعض الأحيان.
|
||||
|
||||
`$ npm cache clean
|
||||
`
|
||||
```shell
|
||||
$ npm cache clean
|
||||
```
|
||||
|
||||
## غزل - بديل ل npm
|
||||
|
||||
غزل هو أيضا مدير حزمة جافا سكريبت المتقدمة والمحافظة عليها من قبل الفيسبوك. كلاهما يشتركان في أوجه تشابه عالية عندما يتعلق الأمر باستخدامهما. من المفترض أن يكون أسرع في تثبيت التبعيات من npm. لتثبيته:
|
||||
|
||||
`npm install -g yarn
|
||||
`
|
||||
```shell
|
||||
npm install -g yarn
|
||||
```
|
||||
|
||||
لا ينوي غزل استبدال npm ، أكثر مثل تحسين عليه. ويستخدم نفس ملف package.json ، ويحفظ التبعيات إلى `node_modules/` folder. لتهيئة مشروع ، سوف تستخدم:
|
||||
|
||||
`yarn init
|
||||
`
|
||||
```shell
|
||||
yarn init
|
||||
```
|
||||
|
||||
### إضافة ، وترقية ، وإزالة التبعيات
|
||||
|
||||
إضافة تبعية جديدة أمر سهل ومماثل إلى npm:
|
||||
|
||||
`yarn add [package-name]
|
||||
`
|
||||
```shell
|
||||
yarn add [package-name]
|
||||
```
|
||||
|
||||
إذا كنت تريد إصدارًا أو علامة حزمة معينة ، فيمكنك القيام بذلك.
|
||||
|
||||
`yarn add express@4.14.1
|
||||
`
|
||||
```shell
|
||||
yarn add express@4.14.1
|
||||
```
|
||||
|
||||
بالنسبة إلى تبعيات dev ، تبعية الأقران والتبعيات الاختيارية التي تمر بها --dev --peer --optional على التوالي.
|
||||
|
||||
`yarn add gulp --dev
|
||||
`
|
||||
```shell
|
||||
yarn add gulp --dev
|
||||
```
|
||||
|
||||
سيوفر الجولب تحت devDependencies. لترقية حزمة أو إزالتها ، يمكنك فقط استبدال أمر الإضافة إما بترقية أو إزالة متبوعة باسم الحزمة.
|
||||
|
||||
`# upgrade a gulp from 3.9.1 to version 4
|
||||
yarn upgrade gulp@4.0
|
||||
```shell
|
||||
# upgrade a gulp from 3.9.1 to version 4
|
||||
yarn upgrade gulp@4.0
|
||||
|
||||
# remove a gulp
|
||||
yarn remove gulp
|
||||
`
|
||||
# remove a gulp
|
||||
yarn remove gulp
|
||||
```
|
||||
|
||||
بعد كل عملية تثبيت أو ترقية أو إزالة ، يقوم الغزل بتحديث ملف yarn.lock الذي يتتبع إصدار الحزمة المضبوط المثبت في دليل node\_modules. تم تحديث ميزة مشابهة في npm. الآن هناك `package-lock.json` التي تتصرف بالضبط بنفس الطريقة كما `yarn.lock` في إصدارات أحدث من npm.
|
||||
|
||||
|
@ -6,10 +6,11 @@ localeTitle: كائن العملية
|
||||
|
||||
يعد كائن `process` في Node.js كائنًا عموميًا يمكن الوصول إليه داخل أية وحدة نمطية دون الحاجة إلى ذلك. هناك عدد قليل جدًا من الكائنات أو الخصائص العامة المتوفرة في Node.js ، وتكون `process` واحدة منها. وهو مكون أساسي في النظام البيئي Node.js لأنه يوفر مجموعات المعلومات المختلفة حول وقت تشغيل البرنامج. لاستكشاف سوف نستخدم واحدة من خصائصه والتي تسمى `process.versions` . تخبرنا هذه الخاصية بالمعلومات حول إصدار Node.js الذي قمنا بتثبيته. يجب استخدامه مع `-p` flag.
|
||||
|
||||
`$ node -p "process.versions"
|
||||
```shell
|
||||
$ node -p "process.versions"
|
||||
|
||||
# output
|
||||
{ http_parser: '2.8.0',
|
||||
# output
|
||||
{ http_parser: '2.8.0',
|
||||
node: '8.11.2',
|
||||
v8: '6.2.414.54',
|
||||
uv: '1.19.1',
|
||||
@ -23,18 +24,19 @@ localeTitle: كائن العملية
|
||||
unicode: '10.0',
|
||||
cldr: '32.0',
|
||||
tz: '2017c' }
|
||||
`
|
||||
```
|
||||
|
||||
خاصية أخرى يمكنك التحقق منها هي `process.release` التي هي نفسها للأمر `$ node --version` التي استخدمناها عندما قمنا بتثبيت Node.js لكن الإخراج هذه المرة سيكون أكثر تفصيلاً.
|
||||
|
||||
`node -p "process.release"
|
||||
```shell
|
||||
node -p "process.release"
|
||||
|
||||
# output
|
||||
{ name: 'node',
|
||||
# output
|
||||
{ name: 'node',
|
||||
lts: 'Carbon',
|
||||
sourceUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2.tar.gz',
|
||||
headersUrl: 'https://nodejs.org/download/release/v8.11.2/node-v8.11.2-headers.tar.gz' }
|
||||
`
|
||||
```
|
||||
|
||||
هذه بعض الأوامر المختلفة التي يمكننا استخدامها في سطر الأوامر للوصول إلى المعلومات التي لا يمكن لأي وحدة توفيرها. يعتبر كائن `process` هذا مثالًا لفئة EventEmitter ولا يحتوي على أحداثه المحددة مسبقًا مثل `exit` والتي يمكن استخدامها لمعرفة متى أكمل أحد البرامج في Node.js تنفيذه. تشغيل البرنامج أدناه ويمكنك ملاحظة أن النتيجة تأتي مع رمز الحالة `0` . في Node.js يعني رمز الحالة هذا أن أحد البرامج قد تم تشغيله بنجاح.
|
||||
|
||||
@ -50,9 +52,10 @@ localeTitle: كائن العملية
|
||||
|
||||
ناتج البرنامج أعلاه:
|
||||
|
||||
`Execution Completed
|
||||
Exited with status code: 0
|
||||
`
|
||||
```shell
|
||||
Execution Completed
|
||||
Exited with status code: 0
|
||||
```
|
||||
|
||||
`Process` توفر أيضا خصائص مختلفة للتفاعل معها. يمكن استخدام بعضها في تطبيق عقدة لتوفير بوابة للتواصل بين تطبيق العقدة وأي واجهة سطر الأوامر. هذا مفيد جدا إذا كنت تقوم ببناء تطبيق سطر الأوامر أو أداة مساعدة باستخدام Node.js
|
||||
|
||||
@ -73,10 +76,11 @@ localeTitle: كائن العملية
|
||||
|
||||
إذا قمت بتشغيل التعليمات البرمجية المذكورة أعلاه باستخدام الأمر التالي ستحصل على الإخراج ويتم طباعة العناصر الأولين من `argv` .
|
||||
|
||||
`$ node test.js
|
||||
```shell
|
||||
$ node test.js
|
||||
|
||||
# output
|
||||
Hello World!
|
||||
0: /usr/local/bin/node
|
||||
1: /Users/amanhimself/Desktop/articles/nodejs-text-tuts/test.js
|
||||
`
|
||||
# output
|
||||
Hello World!
|
||||
0: /usr/local/bin/node
|
||||
1: /Users/amanhimself/Desktop/articles/nodejs-text-tuts/test.js
|
||||
```
|
@ -25,18 +25,20 @@ localeTitle: تيارات
|
||||
|
||||
في Node.js ، يتم استخدام `pipe` بنفس الطريقة ، لربط المدخلات والمخرجات من العمليات المختلفة. يتوفر `pipe()` كدالة تأخذ تيار مصدر مقروء وتربط الإخراج إلى تيار وجهة. يمكن تمثيل الصيغة العامة على النحو التالي:
|
||||
|
||||
`src.pipe(dest);
|
||||
`
|
||||
```javascript
|
||||
src.pipe(dest);
|
||||
```
|
||||
|
||||
يمكن أيضاً ربط الدالات متعددة `pipe()` معاً.
|
||||
|
||||
`a.pipe(b).pipe(c);
|
||||
```javascript
|
||||
a.pipe(b).pipe(c);
|
||||
|
||||
// which is equivalent to
|
||||
// which is equivalent to
|
||||
|
||||
a.pipe(b);
|
||||
b.pipe(c);
|
||||
`
|
||||
a.pipe(b);
|
||||
b.pipe(c);
|
||||
```
|
||||
|
||||
### تيارات مقروءة
|
||||
|
||||
@ -62,24 +64,26 @@ localeTitle: تيارات
|
||||
* الترميز: لتحويل البيانات إلى نموذج قابل للقراءة من قبل الإنسان
|
||||
* رد الاتصال: دالة يتم استدعاؤها عند الانتهاء من معالجة البيانات من القطعة
|
||||
|
||||
`const { Writable } = require('stream');
|
||||
const writable = new Writable({
|
||||
```javascript
|
||||
const { Writable } = require('stream');
|
||||
const writable = new Writable({
|
||||
write(chunk, encoding, callback) {
|
||||
console.log(chunk.toString());
|
||||
callback();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
process.stdin.pipe(writable);
|
||||
`
|
||||
process.stdin.pipe(writable);
|
||||
```
|
||||
|
||||
### تيارات دوبلكس
|
||||
|
||||
تيارات البث المزدوجة تساعدنا على تنفيذ كل من الدفق القابل للقراءة والكتابة في نفس الوقت.
|
||||
|
||||
`const { Duplex } = require('stream');
|
||||
```javascript
|
||||
const { Duplex } = require('stream');
|
||||
|
||||
const inoutStream = new Duplex({
|
||||
const inoutStream = new Duplex({
|
||||
write(chunk, encoding, callback) {
|
||||
console.log(chunk.toString());
|
||||
callback();
|
||||
@ -91,11 +95,11 @@ localeTitle: تيارات
|
||||
this.push(null);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
inoutStream.currentCharCode = 65;
|
||||
process.stdin.pipe(inoutStream).pipe(process.stdout);
|
||||
`
|
||||
inoutStream.currentCharCode = 65;
|
||||
process.stdin.pipe(inoutStream).pipe(process.stdout);
|
||||
```
|
||||
|
||||
`stdin` قطار `stdin` البيانات القابلة للقراءة إلى الدفق المزدوج. يساعدنا `stdout` على رؤية البيانات. تعمل الأجزاء القابلة للقراءة والكتابة في الدفق المزدوج بشكل مستقل تمامًا عن بعضها البعض.
|
||||
|
||||
@ -103,17 +107,18 @@ localeTitle: تيارات
|
||||
|
||||
هذا النوع من الدفق هو أكثر من إصدار متقدم من الدفق المزدوج.
|
||||
|
||||
`const { Transform } = require('stream');
|
||||
```javascript
|
||||
const { Transform } = require('stream');
|
||||
|
||||
const upperCaseTr = new Transform({
|
||||
const upperCaseTr = new Transform({
|
||||
transform(chunk, encoding, callback) {
|
||||
this.push(chunk.toString().toUpperCase());
|
||||
callback();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
process.stdin.pipe(upperCaseTr).pipe(process.stdout);
|
||||
`
|
||||
process.stdin.pipe(upperCaseTr).pipe(process.stdout);
|
||||
```
|
||||
|
||||
البيانات التي نستهلكها هي نفس المثال السابق للدفق المزدوج. إن ما نلاحظه هنا هو أن `transform()` لا يتطلب تنفيذ أساليب `read` أو `write` . يجمع بين كل من الأساليب نفسها.
|
||||
|
||||
@ -121,30 +126,32 @@ localeTitle: تيارات
|
||||
|
||||
نظرًا لأن Node.js غير متزامن بحيث يتفاعل من خلال تمرير الاسترجاعات إلى وظائف مع القرص والشبكة. يقرأ المثال الموجود أدناه البيانات من ملف على القرص ويستجيب إلى طلب الشبكة من العميل.
|
||||
|
||||
`const http = require('http');
|
||||
const fs = require('fs');
|
||||
```javascript
|
||||
const http = require('http');
|
||||
const fs = require('fs');
|
||||
|
||||
const server = http.createServer((req, res) => {
|
||||
const server = http.createServer((req, res) => {
|
||||
fs.readFile('data.txt', (err, data) => {
|
||||
res.end(data);
|
||||
});
|
||||
});
|
||||
server.listen(8000);
|
||||
`
|
||||
});
|
||||
server.listen(8000);
|
||||
```
|
||||
|
||||
سيعمل مقتطف الشفرة الموضح أعلاه ولكن البيانات الكاملة من الملف ستدخل أولاً إلى الذاكرة لكل طلب قبل كتابة النتيجة مرة أخرى لطلب العميل. إذا كان الملف الذي نقرأه كبيرًا جدًا ، فقد يصبح هذا اتصالًا للخادم ثقيلًا ومكلفًا للغاية ، حيث سيستهلك الكثير من الذاكرة لعملية التقدم. ستعاني أيضًا تجربة المستخدم على جانب العميل من التأخير.
|
||||
|
||||
في هذه الحالة ، إذا استخدمنا الدفق ، سيتم إرسال البيانات إلى طلب العميل كقطعة واحدة في كل مرة بمجرد تلقيها من القرص.
|
||||
|
||||
`const http = require('http');
|
||||
const fs = require('fs');
|
||||
```javascript
|
||||
const http = require('http');
|
||||
const fs = require('fs');
|
||||
|
||||
const server = http.createServer((req, res) => {
|
||||
const server = http.createServer((req, res) => {
|
||||
const stream = fs.createReadStream('data.txt');
|
||||
stream.pipe(res);
|
||||
});
|
||||
server.listen(8000);
|
||||
`
|
||||
});
|
||||
server.listen(8000);
|
||||
```
|
||||
|
||||
يعتني `pipe()` هنا بالكتابة أو في حالتنا ، وإرسال البيانات مع كائن الاستجابة وبمجرد قراءة كل البيانات من الملف ، لإغلاق الاتصال.
|
||||
|
||||
|
@ -27,8 +27,9 @@ localeTitle: AJAX
|
||||
|
||||
**إنشاء كائن XMLHttpRequest:**
|
||||
|
||||
`var xhttp = new XMLHttpRequest();
|
||||
`
|
||||
```javascript
|
||||
var xhttp = new XMLHttpRequest();
|
||||
```
|
||||
|
||||
**خصائص كائن XMLHttpRequest:**
|
||||
|
||||
@ -50,13 +51,15 @@ localeTitle: AJAX
|
||||
|
||||
**أساليب كائن XMLHttpRequest:** لإرسال طلب إلى خادم ويب ، نستخدم الأساليب open () و send () للكائن XMLHttpRequest.
|
||||
|
||||
`xhttp.open("GET", "content.txt", true);
|
||||
xhttp.send();
|
||||
`
|
||||
```javascript
|
||||
xhttp.open("GET", "content.txt", true);
|
||||
xhttp.send();
|
||||
```
|
||||
|
||||
**إنشاء تغيير وظيفةContent () باستخدام JavaScript:**
|
||||
|
||||
`function changeContent() {
|
||||
```javascript
|
||||
function changeContent() {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
@ -65,22 +68,23 @@ localeTitle: AJAX
|
||||
};
|
||||
xhttp.open("GET", "content.txt", true);
|
||||
xhttp.send();
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
**مثال AJAX لتغيير محتوى صفحة الويب:**
|
||||
|
||||
`<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```HTML
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<div id="foo">
|
||||
<h2>The XMLHttpRequest Object</h2>
|
||||
<button type="button" onclick="changeContent()">Change Content</button>
|
||||
</div>
|
||||
<div id="foo">
|
||||
<h2>The XMLHttpRequest Object</h2>
|
||||
<button type="button" onclick="changeContent()">Change Content</button>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function changeContent() {
|
||||
<script>
|
||||
function changeContent() {
|
||||
var xhttp = new XMLHttpRequest();
|
||||
xhttp.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
@ -90,12 +94,12 @@ localeTitle: AJAX
|
||||
};
|
||||
xhttp.open("GET", "content.txt", true);
|
||||
xhttp.send();
|
||||
}
|
||||
</script>
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
يجب أن يكون الملف `content.txt` موجودًا في الدليل الجذر لتطبيق الويب.
|
||||
|
||||
|
@ -8,12 +8,13 @@ localeTitle: مجموعة مصفوفة
|
||||
|
||||
هنا مثال:
|
||||
|
||||
`<?php
|
||||
// array without keys
|
||||
$bikes = array("Suzuki","BMW","Yamaha");
|
||||
echo "I like " . $bikes[0] . ", " . $bikes[1] . " and " . $bikes[2] . ".";
|
||||
?>
|
||||
`
|
||||
```
|
||||
<?php
|
||||
// array without keys
|
||||
$bikes = array("Suzuki","BMW","Yamaha");
|
||||
echo "I like " . $bikes[0] . ", " . $bikes[1] . " and " . $bikes[2] . ".";
|
||||
?>
|
||||
```
|
||||
|
||||
مجموعة PHP لديها العديد من الوظائف للعمل بها. هنا هو كل قائمة تم فرزها: [وظائف](https://www.w3schools.com/php/php_ref_array.asp)
|
||||
|
||||
@ -23,13 +24,14 @@ localeTitle: مجموعة مصفوفة
|
||||
|
||||
هذا مثال بسيط:
|
||||
|
||||
`<?php
|
||||
$array = array(
|
||||
```
|
||||
<?php
|
||||
$array = array(
|
||||
"foo" => "bar",
|
||||
"bar" => "foo",
|
||||
);
|
||||
);
|
||||
|
||||
echo $array['bar'];
|
||||
`
|
||||
echo $array['bar'];
|
||||
```
|
||||
|
||||
أتمنى لك يومًا سعيدًا وترميزًا سعيدًا !!!
|
@ -12,9 +12,10 @@ localeTitle: المصفوفات
|
||||
|
||||
صفيف مفهرسة يصل إلى الكائنات حسب رقم الفهرس.
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("free", "code", "camp");
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("free", "code", "camp");
|
||||
```
|
||||
|
||||
`$freecodecamp[0]` سيعود `"free"` ، `$freecodecamp[1]` سيعود `"code"` ، و `$freecodecamp[2]` سيعود `"camp"` .
|
||||
|
||||
@ -22,9 +23,10 @@ localeTitle: المصفوفات
|
||||
|
||||
صفيف جمعية يصل إلى الكائنات عن طريق اسم المفتاح.
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("free"=>"0","code"=>"1","camp"=>"2");
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("free"=>"0","code"=>"1","camp"=>"2");
|
||||
```
|
||||
|
||||
`$freecodecamp['free']` سيعود "0" ، `$freecodecamp['code']` سيعود "1" ، `$freecodecamp['camp']` سيعود "2" ،
|
||||
|
||||
@ -32,9 +34,10 @@ localeTitle: المصفوفات
|
||||
|
||||
المصفوفة متعددة الأبعاد هي مصفوفة تحتوي على صفائف أخرى.
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array(array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"));
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array(array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"),array("free"=>"0","code"=>"1","camp"=>"2"));
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -10,121 +10,133 @@ localeTitle: فرز المصفوفات
|
||||
|
||||
تقوم الدالة `sort()` بفرز قيم صفيف بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("free", "code", "camp");
|
||||
sort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("free", "code", "camp");
|
||||
sort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`Array
|
||||
(
|
||||
```text
|
||||
Array
|
||||
(
|
||||
[0] => camp
|
||||
[1] => code
|
||||
[2] => free
|
||||
)
|
||||
`
|
||||
)
|
||||
```
|
||||
|
||||
### rsort ()
|
||||
|
||||
تقوم `rsort()` بفرز قيم صفيف في ترتيب أبجدي / رقمي تنازلي (Eg Z، Y، X، W، V… 5، 4، 3، 2، 1…)
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("free", "code", "camp");
|
||||
rsort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("free", "code", "camp");
|
||||
rsort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`Array
|
||||
(
|
||||
```text
|
||||
Array
|
||||
(
|
||||
[0] => free
|
||||
[1] => code
|
||||
[2] => camp
|
||||
)
|
||||
`
|
||||
)
|
||||
```
|
||||
|
||||
### asort ()
|
||||
|
||||
تقوم الدالة `asort()` بفرز مصفوفة ارتباطية ، حسب قيمها ، بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
asort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
asort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`Array
|
||||
(
|
||||
```text
|
||||
Array
|
||||
(
|
||||
[two] => camp
|
||||
[one] => code
|
||||
[zero] => free
|
||||
)
|
||||
`
|
||||
)
|
||||
```
|
||||
|
||||
### ksort ()
|
||||
|
||||
تقوم `ksort()` بترتيب مصفوفة `ksort()` ، حسب مفاتيحها ، بترتيب أبجدي / رقمي تصاعدي (على سبيل المثال A ، B ، C ، D ، E… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
ksort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
ksort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`Array
|
||||
(
|
||||
```text
|
||||
Array
|
||||
(
|
||||
[one] => code
|
||||
[two] => camp
|
||||
[zero] => free
|
||||
)
|
||||
`
|
||||
)
|
||||
```
|
||||
|
||||
### arsort ()
|
||||
|
||||
تقوم `arsort()` بترتيب مصفوفة `arsort()` ، حسب قيمها ، بترتيب أبجدي / رقمي تنازلي (Eg Z ، Y ، X ، W ، V… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
arsort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
arsort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`Array
|
||||
(
|
||||
```text
|
||||
Array
|
||||
(
|
||||
[zero] => free
|
||||
[one] => code
|
||||
[two] => camp
|
||||
)
|
||||
`
|
||||
)
|
||||
```
|
||||
|
||||
### krsort ()
|
||||
|
||||
تقوم `krsort()` بترتيب مصفوفة `krsort()` ، من خلال مفاتيحها في ترتيب أبجدي / رقمي تنازلي (Eg Z ، Y ، X ، W ، V… 5 ، 4 ، 3 ، 2 ، 1 ...)
|
||||
|
||||
`<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
krsort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");
|
||||
krsort($freecodecamp);
|
||||
print_r($freecodecamp);
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`Array
|
||||
(
|
||||
```text
|
||||
Array
|
||||
(
|
||||
[zero] => free
|
||||
[two] => camp
|
||||
[one] => code
|
||||
)
|
||||
`
|
||||
)
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -14,19 +14,21 @@ localeTitle: بناء الجملة الأساسي
|
||||
|
||||
# أول صفحة PHP
|
||||
|
||||
`The output of that would be :
|
||||
`
|
||||
```
|
||||
The output of that would be :
|
||||
```
|
||||
|
||||
أول صفحة PHP
|
||||
|
||||
مرحبا بالعالم!
|
||||
|
||||
`#### Note: PHP statements end with a semicolon (;).
|
||||
```
|
||||
#### Note: PHP statements end with a semicolon (;).
|
||||
|
||||
# Comments in PHP
|
||||
# Comments in PHP
|
||||
|
||||
PHP supports several ways of commenting:
|
||||
`
|
||||
PHP supports several ways of commenting:
|
||||
```
|
||||
|
||||
`# PHP Case Sensitivity
|
||||
|
||||
@ -35,9 +37,10 @@ localeTitle: بناء الجملة الأساسي
|
||||
In the example below, all three echo statements below are legal (and equal):
|
||||
`
|
||||
|
||||
`### However; all variable names are case-sensitive.
|
||||
```
|
||||
### However; all variable names are case-sensitive.
|
||||
|
||||
In the example below, only the first statement will display the value of the $color variable (this is because $color, $COLOR, and $coLOR are treated as three different variables):
|
||||
`
|
||||
In the example below, only the first statement will display the value of the $color variable (this is because $color, $COLOR, and $coLOR are treated as three different variables):
|
||||
```
|
||||
|
||||
\`\` \`\`
|
@ -87,55 +87,59 @@ _إعادة تسمية الكود مع الميراث في البرمجة الم
|
||||
|
||||
بدون الاضطرار إلى إعادة كتابة جميع الرموز الخاصة بفئة `Man` ، يمكننا إعادة استخدام هذا الرمز باستخدام الكلمة الأساسية الممتدة.
|
||||
|
||||
`<?php
|
||||
class HealthyMan extends Man
|
||||
{
|
||||
```php
|
||||
<?php
|
||||
class HealthyMan extends Man
|
||||
{
|
||||
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
الآن لدينا جميع خصائص وأساليب الفصل من رجل داخل `HealthyMan` . يمكننا `HealthyMan` فئة `HealthyMan` للتحقق من هذا سريع حقيقي.
|
||||
|
||||
`<?php
|
||||
$jackie = new HealthyMan('Jackie', 25, '5\' 5"');
|
||||
// => Our man's name is: Jackie
|
||||
// => He is 25 years old and 5' 5" tall.
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$jackie = new HealthyMan('Jackie', 25, '5\' 5"');
|
||||
// => Our man's name is: Jackie
|
||||
// => He is 25 years old and 5' 5" tall.
|
||||
```
|
||||
|
||||
يمكننا المضي قدمًا ووضع رياضة ومشروبات HealthyMan aka aka المفضلة.
|
||||
|
||||
`<?php
|
||||
$jackie->fav_sports = ['swimming', 'weight training'];
|
||||
print_r($jackie->fav_sports);
|
||||
// =>
|
||||
// Array
|
||||
// (
|
||||
// [0] => swimming
|
||||
// [1] => weight training
|
||||
// )
|
||||
```php
|
||||
<?php
|
||||
$jackie->fav_sports = ['swimming', 'weight training'];
|
||||
print_r($jackie->fav_sports);
|
||||
// =>
|
||||
// Array
|
||||
// (
|
||||
// [0] => swimming
|
||||
// [1] => weight training
|
||||
// )
|
||||
|
||||
$jackie->setFavDrinks(['Matcha tea', 'Oolong Tea']);
|
||||
print_r($jackie->getFavDrinks());
|
||||
// =>
|
||||
// Array
|
||||
// (
|
||||
// [0] => Matcha tea
|
||||
// [1] => Oolong Tea
|
||||
// )
|
||||
`
|
||||
$jackie->setFavDrinks(['Matcha tea', 'Oolong Tea']);
|
||||
print_r($jackie->getFavDrinks());
|
||||
// =>
|
||||
// Array
|
||||
// (
|
||||
// [0] => Matcha tea
|
||||
// [1] => Oolong Tea
|
||||
// )
|
||||
```
|
||||
|
||||
الآن دعنا نرى ما إذا كان باستطاعتنا الاتصال بطرق `giveFirmHandshakes()` الرجل مثل `giveFirmHandshakes()` و `beStubborn()` و `notPutToiletPaper()` .
|
||||
|
||||
`<?php
|
||||
echo "\n" . $jackie->giveFirmHandshakes();
|
||||
// => I give firm handshakes.
|
||||
```php
|
||||
<?php
|
||||
echo "\n" . $jackie->giveFirmHandshakes();
|
||||
// => I give firm handshakes.
|
||||
|
||||
echo "\n" . $jackie->beStubborn();
|
||||
// => I am stubborn.
|
||||
echo "\n" . $jackie->beStubborn();
|
||||
// => I am stubborn.
|
||||
|
||||
echo "\n" . $jackie->notPutToiletPaper();
|
||||
// => It's not humanly possible to remember to put toilet paper rolls when they are finished
|
||||
`
|
||||
echo "\n" . $jackie->notPutToiletPaper();
|
||||
// => It's not humanly possible to remember to put toilet paper rolls when they are finished
|
||||
```
|
||||
|
||||
نحصل على كل هذه الأشياء من خلال مجرد ترميز فئة رجل باستخدام الكلمة الأساسية الممتدة.
|
||||
|
||||
@ -201,25 +205,26 @@ _إعادة تسمية الكود مع الميراث في البرمجة الم
|
||||
|
||||
يمكننا استدعاء هذه الطرق لمعرفة ما إذا كانت تعمل كما هو متوقع:
|
||||
|
||||
`<?php
|
||||
```php
|
||||
<?php
|
||||
|
||||
echo "\n" . $jackie->eatHealthy();
|
||||
// => I only eat healthy meals.
|
||||
echo "\n" . $jackie->eatHealthy();
|
||||
// => I only eat healthy meals.
|
||||
|
||||
echo "\n" . $jackie->meditateDaily();
|
||||
// => I set aside 20 minutes daily to meditate.
|
||||
echo "\n" . $jackie->meditateDaily();
|
||||
// => I set aside 20 minutes daily to meditate.
|
||||
|
||||
echo "\n" . $jackie->laughOften();
|
||||
// => I watch funny TV shows to unwind myself.
|
||||
echo "\n" . $jackie->laughOften();
|
||||
// => I watch funny TV shows to unwind myself.
|
||||
|
||||
$jackie->setBodyFatPercentage(12);
|
||||
echo "\nBody Fat %: " . $jackie->getBodyFatPercentage();
|
||||
// => Body Fat %: 12
|
||||
$jackie->setBodyFatPercentage(12);
|
||||
echo "\nBody Fat %: " . $jackie->getBodyFatPercentage();
|
||||
// => Body Fat %: 12
|
||||
|
||||
$jackie->setWorkoutPerWeek(5);
|
||||
echo "\nWorkout Times Per Week: " . $jackie->getWorkoutPerWeek();
|
||||
// => Workout Times Per Week: 5
|
||||
`
|
||||
$jackie->setWorkoutPerWeek(5);
|
||||
echo "\nWorkout Times Per Week: " . $jackie->getWorkoutPerWeek();
|
||||
// => Workout Times Per Week: 5
|
||||
```
|
||||
|
||||
لقد نجحنا في إعادة استخدام الشفرة الحالية ونفذنا برنامجًا دراسيًا للأطفال.
|
||||
|
||||
@ -227,9 +232,10 @@ _إعادة تسمية الكود مع الميراث في البرمجة الم
|
||||
|
||||
على الرغم من أنه ورث عن `beStubborn()` من فئة Man ، حيث أن Jackie رجل سليم ، فهو عنيد فقط مرة واحدة فقط في فترة. يمكننا أن نحصل على `beStubborn()` " `beStubborn()` Healthy Man's `beStubborn()` " ليقول "أنا عنيد من حين `beStubborn()` " بدلاً من "أنا عنيد" فقط عن طريق تجاوز أسلوب "الطبقة الأم".
|
||||
|
||||
`<?php
|
||||
class HealthyMan extends Man
|
||||
{
|
||||
```php
|
||||
<?php
|
||||
class HealthyMan extends Man
|
||||
{
|
||||
.....
|
||||
.....
|
||||
|
||||
@ -240,15 +246,16 @@ _إعادة تسمية الكود مع الميراث في البرمجة الم
|
||||
|
||||
.....
|
||||
.....
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
الآن عندما نتمكن من `beStubborn()` طريقة `beStubborn()` ، سنرى مخرجًا مختلفًا عن ذي قبل:
|
||||
|
||||
`<?php
|
||||
echo "\n" . $jackie->beStubborn();
|
||||
// => I am stubborn once in a while.
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
echo "\n" . $jackie->beStubborn();
|
||||
// => I am stubborn once in a while.
|
||||
```
|
||||
|
||||
يوضح هذا كيف يعمل overriding الأسلوب في OOP.
|
||||
|
||||
|
@ -4,7 +4,8 @@ localeTitle: PHP - الصف
|
||||
---
|
||||
### فئة بسيطة للمبتدئين!
|
||||
|
||||
`class Lab {
|
||||
```php
|
||||
class Lab {
|
||||
private $name = '';
|
||||
|
||||
public function setName($name) {
|
||||
@ -20,9 +21,9 @@ localeTitle: PHP - الصف
|
||||
return $name;
|
||||
}
|
||||
|
||||
}
|
||||
$breaking_bad = 'Heisenberg';
|
||||
$lab = new Lab();
|
||||
$lab->setName($breaking_bad);
|
||||
echo "My Name is " . $lab->say_my_name(). "!";
|
||||
`
|
||||
}
|
||||
$breaking_bad = 'Heisenberg';
|
||||
$lab = new Lab();
|
||||
$lab->setName($breaking_bad);
|
||||
echo "My Name is " . $lab->say_my_name(). "!";
|
||||
```
|
@ -8,33 +8,36 @@ localeTitle: الشرطية
|
||||
|
||||
### إذا
|
||||
|
||||
`<?php
|
||||
if ($_GET['name'] = "freecodecamp"){
|
||||
```PHP
|
||||
<?php
|
||||
if ($_GET['name'] = "freecodecamp"){
|
||||
echo "You viewed the freeCodeCamp Page!";
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### ELSEIF
|
||||
|
||||
`<?php
|
||||
if ($_GET['name'] = "freecodecamp"){
|
||||
```PHP
|
||||
<?php
|
||||
if ($_GET['name'] = "freecodecamp"){
|
||||
echo "You viewed the freeCodeCamp Page!";
|
||||
} elseif ($_GET['name'] = "freecodecampguide"){
|
||||
} elseif ($_GET['name'] = "freecodecampguide"){
|
||||
echo "You viewed the freeCodeCamp Guide Page!";
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### آخر
|
||||
|
||||
`<?php
|
||||
if ($_GET['name'] = "freecodecamp"){
|
||||
```PHP
|
||||
<?php
|
||||
if ($_GET['name'] = "freecodecamp"){
|
||||
echo "You viewed the freeCodeCamp Page!";
|
||||
} elseif ($_GET['name'] = "freecodecampguide"){
|
||||
} elseif ($_GET['name'] = "freecodecampguide"){
|
||||
echo "You viewed the freeCodeCamp Guide Page!";
|
||||
} else {
|
||||
} else {
|
||||
echo "You viewed a page that does not exist yet!";
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### ملحوظة
|
||||
|
||||
|
@ -12,15 +12,17 @@ localeTitle: الثوابت
|
||||
|
||||
### مثال
|
||||
|
||||
`<?php
|
||||
define("freeCodeCamp", "Learn to code and help nonprofits", false);
|
||||
echo freeCodeCamp;
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
define("freeCodeCamp", "Learn to code and help nonprofits", false);
|
||||
echo freeCodeCamp;
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`Learn to code and help nonprofits
|
||||
`
|
||||
```text
|
||||
Learn to code and help nonprofits
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -6,13 +6,15 @@ localeTitle: يموت والخروج
|
||||
|
||||
وظائف `die()` و `exit()` متطابقة. يأخذ كل منهم وسيطة واحدة (سلسلة) تحتوي على رسالة خطأ. عند تشغيلها يقومون بإخراج الرسالة ووقف تنفيذ البرنامج النصي فوراً.
|
||||
|
||||
`<?php
|
||||
die('Die() function was run');
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
die('Die() function was run');
|
||||
```
|
||||
|
||||
`<?php
|
||||
exit('Exit() function was run');
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
exit('Exit() function was run');
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -10,31 +10,35 @@ localeTitle: صدى وطباعة
|
||||
|
||||
يكتب الدالة `echo()` قيمة متغير أو وسيطة إلى الشاشة.
|
||||
|
||||
`<?php
|
||||
echo "freeCodeCamp";
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
echo "freeCodeCamp";
|
||||
```
|
||||
|
||||
ملاحظة: طريقة قصيرة لفتح علامة PHP وصدى هو <؟ =
|
||||
|
||||
`<?= "freeCodeCamp"; ?>
|
||||
`
|
||||
```
|
||||
<?= "freeCodeCamp"; ?>
|
||||
```
|
||||
|
||||
### طباعة
|
||||
|
||||
تعمل وظيفة `print()` خارج قيمة متغير أو وسيطة على الشاشة.
|
||||
|
||||
`<?php
|
||||
print "freeCodeCamp";
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
print "freeCodeCamp";
|
||||
```
|
||||
|
||||
### print\_r
|
||||
|
||||
تكتب الدالة `print_r()` قيمة أي متغير (مثل صفيف) أو وسيطة إلى الشاشة ، بخلاف وظائف الارتداد أو الطباعة التي تكون محدودة بشكل أكبر.
|
||||
|
||||
`<?php
|
||||
$freecodecamp = "freeCodeCamp";
|
||||
print_r($freecodecamp);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$freecodecamp = "freeCodeCamp";
|
||||
print_r($freecodecamp);
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -8,34 +8,37 @@ localeTitle: المهام
|
||||
|
||||
### وظيفة بسيطة + دعوة
|
||||
|
||||
`function say_hello() {
|
||||
```php
|
||||
function say_hello() {
|
||||
return "Hello!";
|
||||
}
|
||||
}
|
||||
|
||||
echo say_hello();
|
||||
`
|
||||
echo say_hello();
|
||||
```
|
||||
|
||||
### وظيفة بسيطة + معلمة + مكالمة
|
||||
|
||||
`function say_hello($friend) {
|
||||
```php
|
||||
function say_hello($friend) {
|
||||
return "Hello " . $friend . "!";
|
||||
}
|
||||
}
|
||||
|
||||
echo say_hello('Tommy');
|
||||
`
|
||||
echo say_hello('Tommy');
|
||||
```
|
||||
|
||||
### strtoupper - يجعل جميع الشخصيات أكبر وأكبر!
|
||||
|
||||
`function makeItBIG($a_lot_of_names) {
|
||||
```php
|
||||
function makeItBIG($a_lot_of_names) {
|
||||
foreach($a_lot_of_names as $the_simpsons) {
|
||||
$BIG[] = strtoupper($the_simpsons);
|
||||
}
|
||||
return $BIG;
|
||||
}
|
||||
}
|
||||
|
||||
$a_lot_of_names = ['Homer', 'Marge', 'Bart', 'Maggy', 'Lisa'];
|
||||
var_dump(makeItBIG($a_lot_of_names));
|
||||
`
|
||||
$a_lot_of_names = ['Homer', 'Marge', 'Bart', 'Maggy', 'Lisa'];
|
||||
var_dump(makeItBIG($a_lot_of_names));
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -8,14 +8,16 @@ localeTitle: زمن
|
||||
|
||||
### مثال
|
||||
|
||||
`<?php
|
||||
echo time();
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
echo time();
|
||||
```
|
||||
|
||||
**انتاج:**
|
||||
|
||||
`1511732226
|
||||
`
|
||||
```text
|
||||
1511732226
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -18,27 +18,30 @@ localeTitle: PHP - مرحبا العالم
|
||||
|
||||
يبدأ البرنامج النصي لـ PHP `<?php` وينتهي بـ `?>` :
|
||||
|
||||
`<?php
|
||||
// PHP code goes here
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
// PHP code goes here
|
||||
?>
|
||||
```
|
||||
|
||||
أو يمكنك أيضًا كتابة برنامج نصي PHP يبدأ بـ `<?php` وينتهي بدون `?>` :
|
||||
|
||||
`<?php
|
||||
// PHP code goes here
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
// PHP code goes here
|
||||
```
|
||||
|
||||
أدناه ، لدينا مثال لملف PHP بسيط ، مع برنامج نصي PHP الذي يستخدم دالة PHP مدمجة "echo" لإخراج النص "Hello World!" على صفحة الويب:
|
||||
|
||||
`<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```php
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
echo "My first PHP script!";
|
||||
?>
|
||||
<?php
|
||||
echo "My first PHP script!";
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
@ -48,18 +48,21 @@ PHP هي لغة مفسرة. هذا يعني أنه عند إجراء تغيير
|
||||
|
||||
على توزيعات جنو / لينكس القائمة على ديبيان ، يمكنك التثبيت من خلال:
|
||||
|
||||
`sudo apt install php
|
||||
`
|
||||
```bash
|
||||
sudo apt install php
|
||||
```
|
||||
|
||||
بعد التثبيت ، يمكنك تشغيل أي ملفات PHP ببساطة عن طريق القيام بذلك في المحطة الطرفية:
|
||||
|
||||
`php file.php
|
||||
`
|
||||
```
|
||||
php file.php
|
||||
```
|
||||
|
||||
يمكنك أيضًا تثبيت خادم localhost لتشغيل مواقع PHP على الويب. لتثبيت Apache Web Server:
|
||||
|
||||
`sudo apt install apache2 libapache2-mod-php
|
||||
`
|
||||
```
|
||||
sudo apt install apache2 libapache2-mod-php
|
||||
```
|
||||
|
||||
## ماذا يمكن أن تفعل PHP؟
|
||||
|
||||
|
@ -19,30 +19,33 @@ localeTitle: عقدة
|
||||
|
||||
## بناء الجملة
|
||||
|
||||
`for (init counter; condition; counter increment or decrement)
|
||||
{
|
||||
```
|
||||
for (init counter; condition; counter increment or decrement)
|
||||
{
|
||||
// Code to be executed
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
## مثال
|
||||
|
||||
`<?php
|
||||
for($index = 0; $index < 5; $index ++)
|
||||
{
|
||||
```php
|
||||
<?php
|
||||
for($index = 0; $index < 5; $index ++)
|
||||
{
|
||||
echo "Current loop counter ".$index.".\n";
|
||||
}
|
||||
?>
|
||||
`
|
||||
}
|
||||
?>
|
||||
```
|
||||
|
||||
## انتاج |
|
||||
|
||||
`> Current loop counter 0.
|
||||
> Current loop counter 1.
|
||||
> Current loop counter 2.
|
||||
> Current loop counter 3.
|
||||
> Current loop counter 4.
|
||||
`
|
||||
```
|
||||
> Current loop counter 0.
|
||||
> Current loop counter 1.
|
||||
> Current loop counter 2.
|
||||
> Current loop counter 3.
|
||||
> Current loop counter 4.
|
||||
```
|
||||
|
||||
# حائط اللوب
|
||||
|
||||
@ -50,38 +53,41 @@ localeTitle: عقدة
|
||||
|
||||
## بناء الجملة
|
||||
|
||||
`while (condition)
|
||||
{
|
||||
```
|
||||
while (condition)
|
||||
{
|
||||
// Code to be executed
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
## مثال
|
||||
|
||||
`<?php
|
||||
$index = 10;
|
||||
while ($index >= 0)
|
||||
{
|
||||
```php
|
||||
<?php
|
||||
$index = 10;
|
||||
while ($index >= 0)
|
||||
{
|
||||
echo "The index is ".$index.".\n";
|
||||
$index--;
|
||||
}
|
||||
?>
|
||||
`
|
||||
}
|
||||
?>
|
||||
```
|
||||
|
||||
## انتاج |
|
||||
|
||||
`> The index is 10.
|
||||
> The index is 9.
|
||||
> The index is 8.
|
||||
> The index is 7.
|
||||
> The index is 6.
|
||||
> The index is 5.
|
||||
> The index is 4.
|
||||
> The index is 3.
|
||||
> The index is 2.
|
||||
> The index is 1.
|
||||
> The index is 0.
|
||||
`
|
||||
```
|
||||
> The index is 10.
|
||||
> The index is 9.
|
||||
> The index is 8.
|
||||
> The index is 7.
|
||||
> The index is 6.
|
||||
> The index is 5.
|
||||
> The index is 4.
|
||||
> The index is 3.
|
||||
> The index is 2.
|
||||
> The index is 1.
|
||||
> The index is 0.
|
||||
```
|
||||
|
||||
# هل ... في حين حلقة
|
||||
|
||||
@ -89,33 +95,36 @@ localeTitle: عقدة
|
||||
|
||||
## بناء الجملة
|
||||
|
||||
`do
|
||||
{
|
||||
```
|
||||
do
|
||||
{
|
||||
// Code to be executed
|
||||
}
|
||||
while (condition);
|
||||
`
|
||||
}
|
||||
while (condition);
|
||||
```
|
||||
|
||||
## مثال
|
||||
|
||||
`<?php
|
||||
$index = 3;
|
||||
do
|
||||
{
|
||||
```php
|
||||
<?php
|
||||
$index = 3;
|
||||
do
|
||||
{
|
||||
// execute this at least 1 time
|
||||
echo "Index: ".$index.".\n";
|
||||
$index --;
|
||||
}
|
||||
while ($index > 0);
|
||||
?>
|
||||
`
|
||||
}
|
||||
while ($index > 0);
|
||||
?>
|
||||
```
|
||||
|
||||
## انتاج |
|
||||
|
||||
`> Index: 3.
|
||||
> Index: 2.
|
||||
> Index: 1.
|
||||
`
|
||||
```
|
||||
> Index: 3.
|
||||
> Index: 2.
|
||||
> Index: 1.
|
||||
```
|
||||
|
||||
# حلقة foreach
|
||||
|
||||
@ -123,11 +132,12 @@ localeTitle: عقدة
|
||||
|
||||
## بناء الجملة
|
||||
|
||||
`foreach ($array as $value)
|
||||
{
|
||||
```
|
||||
foreach ($array as $value)
|
||||
{
|
||||
// Code to be executed
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
## مثال
|
||||
|
||||
@ -150,11 +160,12 @@ localeTitle: عقدة
|
||||
|
||||
## انتاج |
|
||||
|
||||
`> Hi, my name is Ali.
|
||||
> Hi, my name is Ah Kao.
|
||||
> Hi, my name is Muthu.
|
||||
> Hi, my name is Gwen.
|
||||
> Hi, my name is Lucida.
|
||||
> Hi, my name is Cecily.
|
||||
> "Hello, Cecily!"
|
||||
`
|
||||
```
|
||||
> Hi, my name is Ali.
|
||||
> Hi, my name is Ah Kao.
|
||||
> Hi, my name is Muthu.
|
||||
> Hi, my name is Gwen.
|
||||
> Hi, my name is Lucida.
|
||||
> Hi, my name is Cecily.
|
||||
> "Hello, Cecily!"
|
||||
```
|
@ -40,19 +40,21 @@ localeTitle: لحلقة
|
||||
|
||||
عند الفهرسة عبر مصفوفة عدة مرات ، من السهل تجاوز حدود الصفيف (على سبيل المثال ، حاول أن ترجع العنصر الرابع في صفيف مكون من 3 عناصر).
|
||||
|
||||
`// This will cause an error.
|
||||
// The bounds of the array will be exceeded.
|
||||
$arr = array(1,2,3);
|
||||
```php
|
||||
// This will cause an error.
|
||||
// The bounds of the array will be exceeded.
|
||||
$arr = array(1,2,3);
|
||||
|
||||
for ($i = 0; $i <= count($arr); $i++) {
|
||||
for ($i = 0; $i <= count($arr); $i++) {
|
||||
var_dump($arr[$i]);
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
هذا سوف يخرج:
|
||||
|
||||
`int(1) int(2) int(3) NULL
|
||||
`
|
||||
```txt
|
||||
int(1) int(2) int(3) NULL
|
||||
```
|
||||
|
||||
هناك طرق لإصلاح هذا الرمز.
|
||||
|
||||
@ -64,9 +66,10 @@ localeTitle: لحلقة
|
||||
|
||||
لحل هذه المشكلة ، من الممكن وضع حجم الصفيف في متغير.
|
||||
|
||||
`//create the $size variable with a second expression comma separated
|
||||
for ($i = 0, $size = count($arr); $i < $size; ++$i) {
|
||||
`
|
||||
```php
|
||||
//create the $size variable with a second expression comma separated
|
||||
for ($i = 0, $size = count($arr); $i < $size; ++$i) {
|
||||
```
|
||||
|
||||
### معلومات اكثر
|
||||
|
||||
|
@ -6,17 +6,19 @@ localeTitle: حائط اللوب
|
||||
|
||||
تعد `while loop` واحدة من أسهل أنواع الحلقات في PHP. ينفذ كتلة البيانات حتى يتم تقييم التعبير إلى **TRUE** . إذا تغيرت قيمة التعبير في وقت التنفيذ ، فستعمل الحلقة حتى يتم تقييم التعبير إلى **FALSE** . يتم إعطاء النموذج الأساسي لحلقة While أدناه:
|
||||
|
||||
`while (expr)
|
||||
```shell
|
||||
while (expr)
|
||||
statement
|
||||
`
|
||||
```
|
||||
|
||||
يمكن تضمين البيانات داخل الحلقة أثناء الأقواس المعقوفة أو يمكن استخدامها بناء على الصيغة التالية:
|
||||
|
||||
`while (expr):
|
||||
```shell
|
||||
while (expr):
|
||||
statement
|
||||
...
|
||||
endwhile;
|
||||
`
|
||||
endwhile;
|
||||
```
|
||||
|
||||
توضيح بناء الجملة البسيط والبديل من حلقة أثناء استخدام المثال:
|
||||
|
||||
|
@ -16,10 +16,11 @@ localeTitle: البرمجة الشيئية
|
||||
|
||||
مع وضع هذه الأمور في الاعتبار ، لم يعد إنشاء فئة رجل أمرًا صعبًا بعد الآن. لذا ، سيذهب البرنامج هكذا.
|
||||
|
||||
`<?php
|
||||
```php
|
||||
<?php
|
||||
|
||||
class Man
|
||||
{
|
||||
class Man
|
||||
{
|
||||
public $name;
|
||||
public $age;
|
||||
public $height;
|
||||
@ -40,8 +41,8 @@ localeTitle: البرمجة الشيئية
|
||||
{
|
||||
return "It's not humanly possible to remember to put toilet paper rolls when they are finished";
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### الرجل الهدف
|
||||
|
||||
@ -90,20 +91,22 @@ localeTitle: البرمجة الشيئية
|
||||
|
||||
لنأخذ هذه الفكرة خطوة أخرى ونجعل جاك يبدأ في تقديم نفسه كلما أنشأنا كائن جاك دون الاضطرار إلى طباعته بشكل فردي على النحو التالي:
|
||||
|
||||
`<?php
|
||||
// Print out Jack's attributes and values
|
||||
echo "Our man's name is: " . $jack->name . "\n";
|
||||
echo "He is " . $jack->age . " years old and " . $jack->height . " tall.";
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
// Print out Jack's attributes and values
|
||||
echo "Our man's name is: " . $jack->name . "\n";
|
||||
echo "He is " . $jack->age . " years old and " . $jack->height . " tall.";
|
||||
```
|
||||
|
||||
هذا هو المكان الصانعين يلعبون. إن المنشئات هي أساليب خاصة يتم استدعائها عند إنشاء كائن.
|
||||
|
||||
لذا ، فإن الفكرة هي طباعة اسم جاك وعمرها وارتفاعها عندما نقوم بإنشاء كائن "جاك" عن طريق إنشاء دروس للإنسان. ولتحقيق ذلك ، نحتاج إلى تحديد الاسم والعمر والطول عند إنشاء الكائن على النحو التالي:
|
||||
|
||||
`<?php
|
||||
// Create a Man object called "Jack"
|
||||
$jack = new Man('Jack', 30, '6 feet');
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
// Create a Man object called "Jack"
|
||||
$jack = new Man('Jack', 30, '6 feet');
|
||||
```
|
||||
|
||||
يخبر هذا الكود "رجل الطبقة" بإنشاء كائن به 3 معلمات: "Jack" للاسم ، 30 لـ age و "6 feet" للارتفاع.
|
||||
|
||||
@ -131,10 +134,11 @@ localeTitle: البرمجة الشيئية
|
||||
|
||||
لذلك ، الآن عندما نقوم بتشكيل فئة Man ، نحتاج إلى وضع 3 معلمات وسيتم طباعتها على الفور.
|
||||
|
||||
`<?php
|
||||
// Create a Man object called "Jack"
|
||||
$jack = new Man('Jack', 30, '6 feet');
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
// Create a Man object called "Jack"
|
||||
$jack = new Man('Jack', 30, '6 feet');
|
||||
```
|
||||
|
||||
`Object created` `Our man's name is: Jack` `He is 30 years old and 6 feet tall.`
|
||||
|
||||
@ -218,10 +222,11 @@ localeTitle: البرمجة الشيئية
|
||||
|
||||
إذا لاحظت أن جميع متغيرات الصفوف (الاسم ، العمر ، الطول ، fav _sports و fav_ drinks) يتم الإعلان عنها على أنها عامة داخل فئة Man. الآن ، بعد إنشاء كائن رجل ، لدينا حق الوصول إلى جميع ممتلكاته عن طريق الاتصال بهم ببساطة:
|
||||
|
||||
`<?php
|
||||
echo $jack->name;
|
||||
echo $jack->height;
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
echo $jack->name;
|
||||
echo $jack->height;
|
||||
```
|
||||
|
||||
ولكن ماذا لو أردنا أن نبقي بعض الأمور سرية عن الرجل؟ ربما لا يريد أن يعرف الجميع سنه ... أو ... ربما يريد فقط بعض الأشخاص أن يعرفوا مشروباته المفضلة. يمكننا تحقيق ذلك عن طريق تغيير مستوى رؤية هذه الخصائص من العامة إلى المحمية وحتى الخاصة.
|
||||
|
||||
@ -233,10 +238,11 @@ localeTitle: البرمجة الشيئية
|
||||
|
||||
سنتحدث عن وراثة فصل في وقت ما. في الوقت الحالي ، دعنا نحاول تعيين فئة العمر محمية و private\_drinks خاصة في فئة Man.
|
||||
|
||||
`<?php
|
||||
```php
|
||||
<?php
|
||||
|
||||
class Man
|
||||
{
|
||||
class Man
|
||||
{
|
||||
// 1. Declare the variables
|
||||
public $name;
|
||||
protected $age;
|
||||
@ -245,19 +251,20 @@ localeTitle: البرمجة الشيئية
|
||||
private $fav_drinks;
|
||||
.....
|
||||
.....
|
||||
`
|
||||
```
|
||||
|
||||
الآن إذا حاولت إنشاء مثيل للفئة وتسمية العمر و fav\_drinks ، فسوف تحصل على خطأ.
|
||||
|
||||
`<?php
|
||||
$jack = new Man('Jack', 30, '6 feet');
|
||||
```php
|
||||
<?php
|
||||
$jack = new Man('Jack', 30, '6 feet');
|
||||
|
||||
echo $jack->age;
|
||||
// Fatal error: Cannot access protected property Man::$age
|
||||
echo $jack->age;
|
||||
// Fatal error: Cannot access protected property Man::$age
|
||||
|
||||
print_r($jack->fav_drinks);
|
||||
// Fatal error: Cannot access private property Man::$fav_drinks
|
||||
`
|
||||
print_r($jack->fav_drinks);
|
||||
// Fatal error: Cannot access private property Man::$fav_drinks
|
||||
```
|
||||
|
||||
### المحددات والرسومات
|
||||
|
||||
@ -265,12 +272,13 @@ localeTitle: البرمجة الشيئية
|
||||
|
||||
للحصول على الخصائص المحمية أو الخاصة ، نحتاج إلى إنشاء طريقة getter مثل هذا داخل فئة Man (لاحظ أن هذه طريقة للفصل مع ظهور للجمهور).
|
||||
|
||||
`<?php
|
||||
public function getAge()
|
||||
{
|
||||
```php
|
||||
<?php
|
||||
public function getAge()
|
||||
{
|
||||
return $this->age;
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
الآن يمكننا بسهولة الحصول على عمر جاك عن طريق استدعاء هذه الطريقة:
|
||||
|
||||
@ -312,9 +320,10 @@ echo $ jack-> getAge ()؛ // 31
|
||||
|
||||
للحصول على fav\_srinks من Jack:
|
||||
|
||||
`<?php
|
||||
echo json_encode($jack->getFavDrinks());
|
||||
// ["coffee","green tea"]
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
echo json_encode($jack->getFavDrinks());
|
||||
// ["coffee","green tea"]
|
||||
```
|
||||
|
||||
وتسمى هذه الطريقة في تطبيق واستخدام أساليب الصف لاسترجاع وتحديث خصائص الصفات بالتغليف في البرمجة الشيئية. يمكننا أيضًا تعيين مستوى الرؤية لطرق الصفوف تمامًا مثل الطريقة التي استخدمناها في خصائص الصف.
|
@ -53,17 +53,18 @@ localeTitle: صفائف Php
|
||||
|
||||
سيؤدي ذلك إلى النتيجة التالية -
|
||||
|
||||
`Value is 1
|
||||
Value is 2
|
||||
Value is 3
|
||||
Value is 4
|
||||
Value is 5
|
||||
Value is one
|
||||
Value is two
|
||||
Value is three
|
||||
Value is four
|
||||
Value is five
|
||||
`
|
||||
```
|
||||
Value is 1
|
||||
Value is 2
|
||||
Value is 3
|
||||
Value is 4
|
||||
Value is 5
|
||||
Value is one
|
||||
Value is two
|
||||
Value is three
|
||||
Value is four
|
||||
Value is five
|
||||
```
|
||||
|
||||
### صفيفات الارتباط
|
||||
|
||||
@ -101,13 +102,14 @@ localeTitle: صفائف Php
|
||||
|
||||
سيؤدي ذلك إلى النتيجة التالية -
|
||||
|
||||
`Salary of mohammad is 2000
|
||||
Salary of qadir is 1000
|
||||
Salary of zara is 500
|
||||
Salary of mohammad is high
|
||||
Salary of qadir is medium
|
||||
Salary of zara is low
|
||||
`
|
||||
```
|
||||
Salary of mohammad is 2000
|
||||
Salary of qadir is 1000
|
||||
Salary of zara is 500
|
||||
Salary of mohammad is high
|
||||
Salary of qadir is medium
|
||||
Salary of zara is low
|
||||
```
|
||||
|
||||
### صفائف متعددة الأبعاد
|
||||
|
||||
@ -158,7 +160,8 @@ localeTitle: صفائف Php
|
||||
|
||||
سيؤدي ذلك إلى النتيجة التالية -
|
||||
|
||||
`Marks for mohammad in physics : 35
|
||||
Marks for qadir in maths : 32
|
||||
Marks for zara in chemistry : 39
|
||||
`
|
||||
```
|
||||
Marks for mohammad in physics : 35
|
||||
Marks for qadir in maths : 32
|
||||
Marks for zara in chemistry : 39
|
||||
```
|
@ -28,25 +28,26 @@ localeTitle: الكوكيز بي اتش بي
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
$cookie_name = "user";
|
||||
$cookie_value = "John Doe";
|
||||
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
|
||||
?>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<?php
|
||||
$cookie_name = "user";
|
||||
$cookie_value = "John Doe";
|
||||
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
|
||||
?>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
if(!isset($_COOKIE[$cookie_name])) {
|
||||
<?php
|
||||
if(!isset($_COOKIE[$cookie_name])) {
|
||||
echo "Cookie named '" . $cookie_name . "' is not set!";
|
||||
} else {
|
||||
} else {
|
||||
echo "Cookie '" . $cookie_name . "' is set!<br>";
|
||||
echo "Value is: " . $_COOKIE[$cookie_name];
|
||||
}
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
}
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
**ملاحظة:** يجب أن تظهر الدالة setcookie () **قبل** العلامة.
|
||||
|
||||
@ -60,26 +61,27 @@ localeTitle: الكوكيز بي اتش بي
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
$cookie_name = "user";
|
||||
$cookie_value = "Jane Porter";
|
||||
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
|
||||
?>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<?php
|
||||
$cookie_name = "user";
|
||||
$cookie_value = "Jane Porter";
|
||||
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
|
||||
?>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
if(!isset($_COOKIE[$cookie_name])) {
|
||||
<?php
|
||||
if(!isset($_COOKIE[$cookie_name])) {
|
||||
echo "Cookie named '" . $cookie_name . "' is not set!";
|
||||
} else {
|
||||
} else {
|
||||
echo "Cookie '" . $cookie_name . "' is set!<br>";
|
||||
echo "Value is: " . $_COOKIE[$cookie_name];
|
||||
}
|
||||
?>
|
||||
}
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
انتاج:
|
||||
تم تعيين Cookie 'user'!
|
||||
@ -91,20 +93,21 @@ localeTitle: الكوكيز بي اتش بي
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
// set the expiration date to one hour ago
|
||||
setcookie("user", "", time() - 3600);
|
||||
?>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<?php
|
||||
// set the expiration date to one hour ago
|
||||
setcookie("user", "", time() - 3600);
|
||||
?>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
echo "Cookie 'user' is deleted.";
|
||||
?>
|
||||
<?php
|
||||
echo "Cookie 'user' is deleted.";
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
انتاج:
|
||||
يتم حذف Cookie 'user'.
|
@ -21,9 +21,10 @@ localeTitle: أنواع البيانات PHP
|
||||
|
||||
#### مثال
|
||||
|
||||
`$x = "Hello!";
|
||||
$y = 'Hello!';
|
||||
`
|
||||
```
|
||||
$x = "Hello!";
|
||||
$y = 'Hello!';
|
||||
```
|
||||
|
||||
## PHP Integer
|
||||
|
||||
@ -52,9 +53,10 @@ localeTitle: أنواع البيانات PHP
|
||||
|
||||
Boolean يمثل حالتين محتملتين: TRUE أو FALSE. يتم استخدام Booleans غالبًا في الاختبارات الشرطية.
|
||||
|
||||
`$x = true;
|
||||
$y = false;
|
||||
`
|
||||
```
|
||||
$x = true;
|
||||
$y = false;
|
||||
```
|
||||
|
||||
## صفيف PHP
|
||||
|
||||
@ -70,11 +72,12 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
||||
|
||||
**ملاحظة:** إذا تم إنشاء متغير بدون قيمة ، فسيتم تعيين قيمة فارغة له تلقائيًا.
|
||||
|
||||
`<?php
|
||||
$x = "Hello world!";
|
||||
$x = null;
|
||||
?>
|
||||
`
|
||||
```
|
||||
<?php
|
||||
$x = "Hello world!";
|
||||
$x = null;
|
||||
?>
|
||||
```
|
||||
|
||||
انتاج:
|
||||
لا شيء
|
||||
@ -87,17 +90,18 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
class Car {
|
||||
```
|
||||
<?php
|
||||
class Car {
|
||||
function Car() {
|
||||
$this->model = "VW";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// create an object
|
||||
$herbie = new Car();
|
||||
// create an object
|
||||
$herbie = new Car();
|
||||
|
||||
// show object properties
|
||||
echo $herbie->model;
|
||||
?>
|
||||
`
|
||||
// show object properties
|
||||
echo $herbie->model;
|
||||
?>
|
||||
```
|
@ -22,13 +22,14 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
||||
|
||||
#### مثال
|
||||
|
||||
`<?php
|
||||
echo "<h2>PHP is Fun!</h2>";
|
||||
echo "Hello world!<br>";
|
||||
echo "I'm about to learn PHP!<br>";
|
||||
echo "This ", "string ", "was ", "made ", "with multiple parameters.";
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
echo "<h2>PHP is Fun!</h2>";
|
||||
echo "Hello world!<br>";
|
||||
echo "I'm about to learn PHP!<br>";
|
||||
echo "This ", "string ", "was ", "made ", "with multiple parameters.";
|
||||
?>
|
||||
```
|
||||
|
||||
#### عرض المتغيرات
|
||||
|
||||
@ -36,17 +37,18 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
||||
|
||||
#### مثال
|
||||
|
||||
`<?php
|
||||
$txt1 = "Learn PHP";
|
||||
$txt2 = "W3Schools.com";
|
||||
$x = 5;
|
||||
$y = 4;
|
||||
```php
|
||||
<?php
|
||||
$txt1 = "Learn PHP";
|
||||
$txt2 = "W3Schools.com";
|
||||
$x = 5;
|
||||
$y = 4;
|
||||
|
||||
echo "<h2>" . $txt1 . "</h2>";
|
||||
echo "Study PHP at " . $txt2 . "<br>";
|
||||
echo $x + $y;
|
||||
?>
|
||||
`
|
||||
echo "<h2>" . $txt1 . "</h2>";
|
||||
echo "Study PHP at " . $txt2 . "<br>";
|
||||
echo $x + $y;
|
||||
?>
|
||||
```
|
||||
|
||||
### بيان طباعة PHP
|
||||
|
||||
@ -58,12 +60,13 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
||||
|
||||
#### مثال
|
||||
|
||||
`<?php
|
||||
print "<h2>PHP is Fun!</h2>";
|
||||
print "Hello world!<br>";
|
||||
print "I'm about to learn PHP!";
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
print "<h2>PHP is Fun!</h2>";
|
||||
print "Hello world!<br>";
|
||||
print "I'm about to learn PHP!";
|
||||
?>
|
||||
```
|
||||
|
||||
#### عرض المتغيرات
|
||||
|
||||
@ -71,14 +74,15 @@ localeTitle: PHP 5 صدى وطباعة البيانات
|
||||
|
||||
#### مثال
|
||||
|
||||
`<?php
|
||||
$txt1 = "Learn PHP";
|
||||
$txt2 = "W3Schools.com";
|
||||
$x = 5;
|
||||
$y = 4;
|
||||
```php
|
||||
<?php
|
||||
$txt1 = "Learn PHP";
|
||||
$txt2 = "W3Schools.com";
|
||||
$x = 5;
|
||||
$y = 4;
|
||||
|
||||
print "<h2>" . $txt1 . "</h2>";
|
||||
print "Study PHP at " . $txt2 . "<br>";
|
||||
print $x + $y;
|
||||
?>
|
||||
`
|
||||
print "<h2>" . $txt1 . "</h2>";
|
||||
print "Study PHP at " . $txt2 . "<br>";
|
||||
print $x + $y;
|
||||
?>
|
||||
```
|
@ -10,67 +10,72 @@ localeTitle: PHP 5 التعامل مع النموذج
|
||||
|
||||
#### مثال
|
||||
|
||||
`<html>
|
||||
<body>
|
||||
```php
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<form action="welcome.php" method="post">
|
||||
Name: <input type="text" name="name"><br>
|
||||
E-mail: <input type="text" name="email"><br>
|
||||
<input type="submit">
|
||||
</form>
|
||||
<form action="welcome.php" method="post">
|
||||
Name: <input type="text" name="name"><br>
|
||||
E-mail: <input type="text" name="email"><br>
|
||||
<input type="submit">
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
عندما يملأ المستخدم النموذج أعلاه وينقر على زر الإرسال ، يتم إرسال بيانات النموذج للمعالجة إلى ملف PHP المسمى "welcome.php". يتم إرسال بيانات النموذج باستخدام طريقة HTTP POST.
|
||||
|
||||
لعرض البيانات المقدمة ، يمكنك ببساطة ترديد كل المتغيرات. يبدو "welcome.php" كما يلي:
|
||||
|
||||
`<html>
|
||||
<body>
|
||||
```php
|
||||
<html>
|
||||
<body>
|
||||
|
||||
Welcome <?php echo $_POST["name"]; ?><br>
|
||||
Your email address is: <?php echo $_POST["email"]; ?>
|
||||
Welcome <?php echo $_POST["name"]; ?><br>
|
||||
Your email address is: <?php echo $_POST["email"]; ?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
يمكن أن يكون الإخراج شيء من هذا القبيل:
|
||||
|
||||
`Welcome John
|
||||
Your email address is john.doe@example.com
|
||||
`
|
||||
```
|
||||
Welcome John
|
||||
Your email address is john.doe@example.com
|
||||
```
|
||||
|
||||
يمكن تحقيق نفس النتيجة باستخدام طريقة HTTP GET:
|
||||
|
||||
#### مثال
|
||||
|
||||
`<html>
|
||||
<body>
|
||||
```php
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<form action="welcome_get.php" method="get">
|
||||
Name: <input type="text" name="name"><br>
|
||||
E-mail: <input type="text" name="email"><br>
|
||||
<input type="submit">
|
||||
</form>
|
||||
<form action="welcome_get.php" method="get">
|
||||
Name: <input type="text" name="name"><br>
|
||||
E-mail: <input type="text" name="email"><br>
|
||||
<input type="submit">
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
و "welcome\_get.php" يشبه هذا:
|
||||
|
||||
`<html>
|
||||
<body>
|
||||
```php
|
||||
<html>
|
||||
<body>
|
||||
|
||||
Welcome <?php echo $_GET["name"]; ?><br>
|
||||
Your email address is: <?php echo $_GET["email"]; ?>
|
||||
Welcome <?php echo $_GET["name"]; ?><br>
|
||||
Your email address is: <?php echo $_GET["email"]; ?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
الرمز أعلاه بسيط للغاية. ومع ذلك ، فإن الشيء الأكثر أهمية مفقود. يلزمك التحقق من صحة بيانات النموذج لحماية النص البرمجي من الشفرة الضارة.
|
||||
|
||||
|
@ -14,12 +14,13 @@ localeTitle: نماذج PHP 5 - الحقول المطلوبة
|
||||
|
||||
في الشفرة التالية ، أضفنا بعض المتغيرات الجديدة: $ nameErr و $ emailErr و genderErr و $ websiteErr. سوف تحتوي متغيرات الخطأ هذه على رسائل خطأ للحقول المطلوبة. لقد أضفنا أيضًا جملة if else لكل _متغير POST_ $ _. يتحقق هذا إذا كان_ متغير POST _$_ فارغًا (مع وظيفة PHP فارغة ()). إذا كانت فارغة ، يتم تخزين رسالة خطأ في متغيرات الخطأ المختلفة ، وإذا لم تكن فارغة ، فإنها ترسل بيانات إدخال المستخدم من خلال الدالة test\_input ():
|
||||
|
||||
`<?php
|
||||
// define variables and set to empty values
|
||||
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
||||
$name = $email = $gender = $comment = $website = "";
|
||||
```php
|
||||
<?php
|
||||
// define variables and set to empty values
|
||||
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
||||
$name = $email = $gender = $comment = $website = "";
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
if (empty($_POST["name"])) {
|
||||
$nameErr = "Name is required";
|
||||
} else {
|
||||
@ -49,9 +50,9 @@ localeTitle: نماذج PHP 5 - الحقول المطلوبة
|
||||
} else {
|
||||
$gender = test_input($_POST["gender"]);
|
||||
}
|
||||
}
|
||||
?>
|
||||
`
|
||||
}
|
||||
?>
|
||||
```
|
||||
|
||||
### PHP - عرض رسائل الخطأ
|
||||
|
||||
@ -59,29 +60,30 @@ localeTitle: نماذج PHP 5 - الحقول المطلوبة
|
||||
|
||||
#### مثال
|
||||
|
||||
`<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
|
||||
```php
|
||||
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
|
||||
|
||||
Name: <input type="text" name="name">
|
||||
<span class="error">* <?php echo $nameErr;?></span>
|
||||
<br><br>
|
||||
E-mail:
|
||||
<input type="text" name="email">
|
||||
<span class="error">* <?php echo $emailErr;?></span>
|
||||
<br><br>
|
||||
Website:
|
||||
<input type="text" name="website">
|
||||
<span class="error"><?php echo $websiteErr;?></span>
|
||||
<br><br>
|
||||
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
|
||||
<br><br>
|
||||
Gender:
|
||||
<input type="radio" name="gender" value="female">Female
|
||||
<input type="radio" name="gender" value="male">Male
|
||||
<span class="error">* <?php echo $genderErr;?></span>
|
||||
<br><br>
|
||||
<input type="submit" name="submit" value="Submit">
|
||||
Name: <input type="text" name="name">
|
||||
<span class="error">* <?php echo $nameErr;?></span>
|
||||
<br><br>
|
||||
E-mail:
|
||||
<input type="text" name="email">
|
||||
<span class="error">* <?php echo $emailErr;?></span>
|
||||
<br><br>
|
||||
Website:
|
||||
<input type="text" name="website">
|
||||
<span class="error"><?php echo $websiteErr;?></span>
|
||||
<br><br>
|
||||
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
|
||||
<br><br>
|
||||
Gender:
|
||||
<input type="radio" name="gender" value="female">Female
|
||||
<input type="radio" name="gender" value="male">Male
|
||||
<span class="error">* <?php echo $genderErr;?></span>
|
||||
<br><br>
|
||||
<input type="submit" name="submit" value="Submit">
|
||||
|
||||
</form>
|
||||
`
|
||||
</form>
|
||||
```
|
||||
|
||||
الخطوة التالية هي التحقق من صحة بيانات الإدخال ، أي "هل يحتوي حقل الاسم على أحرف و مسافة بيضاء فقط؟" ، و "هل يحتوي حقل البريد الإلكتروني على بناء عنوان بريد إلكتروني صالح؟" ، وإذا تم تعبئته ، " هل يحتوي حقل موقع الويب على عنوان URL صالح؟ ".
|
@ -8,11 +8,12 @@ localeTitle: نماذج PHP 5 - التحقق من البريد الإلكترو
|
||||
|
||||
يعرض الرمز أدناه طريقة بسيطة للتحقق مما إذا كان حقل الاسم يحتوي فقط على أحرف ومسافة بيضاء. إذا كانت قيمة حقل الاسم غير صالحة ، فقم بتخزين رسالة خطأ:
|
||||
|
||||
`$name = test_input($_POST["name"]);
|
||||
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
|
||||
```php
|
||||
$name = test_input($_POST["name"]);
|
||||
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
|
||||
$nameErr = "Only letters and white space allowed";
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
> **تقوم الدالة preg\_match () بالبحث عن سلسلة للنمط ، وإرجاع true إذا كان النمط موجودًا ، والخطأ بخلاف ذلك.**
|
||||
|
||||
@ -22,21 +23,23 @@ localeTitle: نماذج PHP 5 - التحقق من البريد الإلكترو
|
||||
|
||||
في الرمز أدناه ، إذا لم يكن عنوان البريد الإلكتروني جيدًا ، فقم بتخزين رسالة خطأ:
|
||||
|
||||
`$email = test_input($_POST["email"]);
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
```php
|
||||
$email = test_input($_POST["email"]);
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
$emailErr = "Invalid email format";
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### PHP - التحقق من صحة URL
|
||||
|
||||
يعرض الرمز أدناه طريقة للتحقق مما إذا كان بناء جملة عنوان URL صحيحًا (يسمح هذا التعبير العادي أيضًا بشروط في عنوان URL). إذا كان بناء جملة عنوان URL غير صالح ، فقم بتخزين رسالة خطأ:
|
||||
|
||||
`$website = test_input($_POST["website"]);
|
||||
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
|
||||
```php
|
||||
$website = test_input($_POST["website"]);
|
||||
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
|
||||
$websiteErr = "Invalid URL";
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
### PHP - التحقق من صحة الاسم والبريد الإلكتروني وعنوان URL
|
||||
|
||||
@ -44,12 +47,13 @@ localeTitle: نماذج PHP 5 - التحقق من البريد الإلكترو
|
||||
|
||||
#### مثال
|
||||
|
||||
`<?php
|
||||
// define variables and set to empty values
|
||||
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
||||
$name = $email = $gender = $comment = $website = "";
|
||||
```php
|
||||
<?php
|
||||
// define variables and set to empty values
|
||||
$nameErr = $emailErr = $genderErr = $websiteErr = "";
|
||||
$name = $email = $gender = $comment = $website = "";
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
if (empty($_POST["name"])) {
|
||||
$nameErr = "Name is required";
|
||||
} else {
|
||||
@ -91,6 +95,6 @@ localeTitle: نماذج PHP 5 - التحقق من البريد الإلكترو
|
||||
} else {
|
||||
$gender = test_input($_POST["gender"]);
|
||||
}
|
||||
}
|
||||
?>
|
||||
`
|
||||
}
|
||||
?>
|
||||
```
|
@ -42,8 +42,9 @@ localeTitle: وظائف PHP
|
||||
|
||||
سيظهر هذا النتيجة التالية -
|
||||
|
||||
`You are really a nice person, Have a nice time!
|
||||
`
|
||||
```
|
||||
You are really a nice person, Have a nice time!
|
||||
```
|
||||
|
||||
### وظائف PHP مع المعلمات
|
||||
|
||||
@ -72,8 +73,9 @@ localeTitle: وظائف PHP
|
||||
|
||||
سيظهر هذا النتيجة التالية -
|
||||
|
||||
`Sum of the two numbers is : 30
|
||||
`
|
||||
```
|
||||
Sum of the two numbers is : 30
|
||||
```
|
||||
|
||||
### تمرير الحجج حسب المرجع
|
||||
|
||||
@ -115,9 +117,10 @@ localeTitle: وظائف PHP
|
||||
|
||||
سيظهر هذا النتيجة التالية -
|
||||
|
||||
`Original Value is 10
|
||||
Original Value is 16
|
||||
`
|
||||
```
|
||||
Original Value is 10
|
||||
Original Value is 16
|
||||
```
|
||||
|
||||
### وظائف PHP العودة القيمة
|
||||
|
||||
@ -151,8 +154,9 @@ localeTitle: وظائف PHP
|
||||
|
||||
سيظهر هذا النتيجة التالية -
|
||||
|
||||
`Returned value from the function : 30
|
||||
`
|
||||
```
|
||||
Returned value from the function : 30
|
||||
```
|
||||
|
||||
### ضبط القيم الافتراضية لمعلمات الدالة
|
||||
|
||||
@ -183,8 +187,9 @@ localeTitle: وظائف PHP
|
||||
|
||||
هذا سينتج النتيجة التالية -
|
||||
|
||||
`This is test
|
||||
`
|
||||
```
|
||||
This is test
|
||||
```
|
||||
|
||||
### المكالمات الديناميكية
|
||||
|
||||
@ -213,5 +218,6 @@ localeTitle: وظائف PHP
|
||||
|
||||
سيظهر هذا النتيجة التالية -
|
||||
|
||||
`Hello
|
||||
`
|
||||
```
|
||||
Hello
|
||||
```
|
@ -14,8 +14,9 @@ localeTitle: تثبيت PHP
|
||||
|
||||
اكتب العنوان التالي في مربع عنوان المتصفح الخاص بك.
|
||||
|
||||
`http://127.0.0.1/info.php
|
||||
`
|
||||
```shell
|
||||
http://127.0.0.1/info.php
|
||||
```
|
||||
|
||||
إذا كان هذا يعرض صفحة تعرض معلومات تثبيت PHP الخاصة بك ، فهذا يعني أنه لديك PHP و Webserver مثبت بشكل صحيح.
|
||||
|
||||
|
@ -25,9 +25,10 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
||||
|
||||
سيؤدي ذلك إلى النتيجة التالية -
|
||||
|
||||
`My $variable will not print!\n
|
||||
My name will print
|
||||
`
|
||||
```
|
||||
My $variable will not print!\n
|
||||
My name will print
|
||||
```
|
||||
|
||||
لا توجد حدود صناعية على طول السلسلة - داخل حدود الذاكرة المتوفرة ، يجب أن تكون قادرًا على جعل سلاسل طويلة عشوائية.
|
||||
|
||||
@ -55,8 +56,9 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
||||
|
||||
سيؤدي ذلك إلى النتيجة التالية -
|
||||
|
||||
`Hello World 1234
|
||||
`
|
||||
```
|
||||
Hello World 1234
|
||||
```
|
||||
|
||||
إذا نظرنا إلى الكود أعلاه سترى أننا استخدمنا عامل التشغيل السلسلتي مرتين. هذا لأنه كان علينا إدخال سلسلة ثالثة.
|
||||
|
||||
@ -68,15 +70,17 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
||||
|
||||
دعونا نعثر على طول السلسلة "Hello world!":
|
||||
|
||||
`<?php
|
||||
```
|
||||
<?php
|
||||
echo strlen("Hello world!");
|
||||
?>
|
||||
`
|
||||
?>
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى النتيجة التالية -
|
||||
|
||||
`12
|
||||
`
|
||||
```
|
||||
12
|
||||
```
|
||||
|
||||
غالباً ما يتم استخدام طول سلسلة في حلقات أو دالات أخرى ، عندما يكون من المهم معرفة متى تنتهي السلسلة. (أي في حلقة ، نود إيقاف الحلقة بعد الحرف الأخير في السلسلة)
|
||||
|
||||
@ -88,10 +92,11 @@ $ string _1 = "هذه سلسلة في علامات تنصيص مزدوجة"؛ $
|
||||
|
||||
دعونا نرى ما إذا كان بإمكاننا العثور على سلسلة "العالم" في سلسلتنا -
|
||||
|
||||
`<?php
|
||||
```
|
||||
<?php
|
||||
echo strpos("Hello world!","world");
|
||||
?>
|
||||
`
|
||||
?>
|
||||
```
|
||||
|
||||
سيؤدي ذلك إلى النتيجة التالية -
|
||||
|
||||
|
@ -27,10 +27,11 @@ localeTitle: تبديل PHP
|
||||
|
||||
شكل توضيحي لبيان `switch` مع مثال
|
||||
|
||||
`<?php
|
||||
```
|
||||
<?php
|
||||
|
||||
$i = 1
|
||||
switch ($i) {
|
||||
$i = 1
|
||||
switch ($i) {
|
||||
case 0:
|
||||
echo "i equals 0";
|
||||
break;
|
||||
@ -40,26 +41,27 @@ localeTitle: تبديل PHP
|
||||
case 2:
|
||||
echo "i equals 2";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
`
|
||||
?>
|
||||
```
|
||||
|
||||
يمكن أيضًا استخدام عبارة `switch` دون بيان `break` . في هذه الحالة ، سيتم تنفيذ العبارات بعد الحالات المتطابقة. أدناه هو استخدام بيان `switch` دون بيان `break` .
|
||||
|
||||
`<?php
|
||||
switch ($i) {
|
||||
```
|
||||
<?php
|
||||
switch ($i) {
|
||||
case 0:
|
||||
echo "i equals 0";
|
||||
case 1:
|
||||
echo "i equals 1";
|
||||
case 2:
|
||||
echo "i equals 2";
|
||||
}
|
||||
?>
|
||||
}
|
||||
?>
|
||||
|
||||
/*output --> i equals 0i equals 1i equals 2 */
|
||||
`
|
||||
/*output --> i equals 0i equals 1i equals 2 */
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -16,19 +16,20 @@ localeTitle: بناء php
|
||||
|
||||
#### عينة التعليمات البرمجية
|
||||
|
||||
`<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<h1>My first PHP page</h1>
|
||||
<h1>My first PHP page</h1>
|
||||
|
||||
<?php
|
||||
echo "Hello World!";
|
||||
?>
|
||||
<?php
|
||||
echo "Hello World!";
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
##### ملاحظة: تنتهي عبارات PHP بفاصلة منقوطة `;`
|
||||
|
||||
@ -36,46 +37,50 @@ localeTitle: بناء php
|
||||
|
||||
نعلن عن وجود متغيرات في PHP عن طريق إضافة علامة `$` قبلها.
|
||||
|
||||
`<?php
|
||||
$x = 5;
|
||||
echo $x;
|
||||
?>
|
||||
`
|
||||
```
|
||||
<?php
|
||||
$x = 5;
|
||||
echo $x;
|
||||
?>
|
||||
```
|
||||
|
||||
### تعليقات في PHP
|
||||
|
||||
لكتابة تعليق سطر واحد في PHP ، نضع hashtag `#` أو بوضع `//` قبل التعليق.
|
||||
|
||||
`<?php
|
||||
# This is a single line comment
|
||||
// This is also a single line comment
|
||||
?>
|
||||
`
|
||||
```
|
||||
<?php
|
||||
# This is a single line comment
|
||||
// This is also a single line comment
|
||||
?>
|
||||
```
|
||||
|
||||
لكتابة تعليق خط مزدوج ، نبدأ التعليق مع `/*` وننتهي بـ `*/` .
|
||||
|
||||
`<?php
|
||||
/* This is a
|
||||
Double line comment. */
|
||||
?>
|
||||
`
|
||||
```
|
||||
<?php
|
||||
/* This is a
|
||||
Double line comment. */
|
||||
?>
|
||||
```
|
||||
|
||||
يمكننا أيضًا التعليق على بعض أجزاء سطر الشفرة.
|
||||
|
||||
#### عينة الكود
|
||||
|
||||
`<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
// You can also use comments to leave out parts of a code line
|
||||
$x = 5 /* + 15 */ + 5;
|
||||
echo $x;
|
||||
?>
|
||||
<?php
|
||||
// You can also use comments to leave out parts of a code line
|
||||
$x = 5 /* + 15 */ + 5;
|
||||
echo $x;
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
يمكنك معرفة المزيد عن هذا في [دليل PHP](http://php.net/manual/en/)
|
@ -8,12 +8,13 @@ PHP يسمح أيضا لعلامة مفتوحة قصيرة `<?` (وهو أمر
|
||||
|
||||
إذا كان الملف عبارة عن كود PHP خالص ، فمن الأفضل حذف علامة إغلاق PHP في نهاية الملف. يؤدي ذلك إلى منع المساحات البيضاء أو الخطوط الجديدة التي تتم إضافتها بعد علامة إغلاق PHP ، والتي قد تتسبب في حدوث تأثيرات غير مرغوب فيها لأن PHP سيبدأ التخزين المؤقت للإخراج عندما لا يكون هناك نية من المبرمج لإرسال أي إخراج عند هذه النقطة في البرنامج النصي.
|
||||
|
||||
`<?php
|
||||
echo "Hello world";
|
||||
```php
|
||||
<?php
|
||||
echo "Hello world";
|
||||
|
||||
// ... more code
|
||||
// ... more code
|
||||
|
||||
echo "Last statement";
|
||||
echo "Last statement";
|
||||
|
||||
// the script ends here with no PHP closing tag
|
||||
`
|
||||
// the script ends here with no PHP closing tag
|
||||
```
|
@ -6,13 +6,14 @@ localeTitle: متغيرات PHP
|
||||
|
||||
المتغيرات هي "حاويات" لتخزين المعلومات. يتم الإعلان عن المتغيرات باستخدام علامة الدولار ($) متبوعة مباشرة باسم المتغير. على سبيل المثال ، سيعمل قالب التعليمة البرمجية أدناه على إنشاء متغير يسمى `myVariable` وتعيين سلسلة `Hello World` إليه.
|
||||
|
||||
`<?php
|
||||
$myVariable = "Hello World";
|
||||
$x = 5;
|
||||
$y = 10.5;
|
||||
$z = '42';
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$myVariable = "Hello World";
|
||||
$x = 5;
|
||||
$y = 10.5;
|
||||
$z = '42';
|
||||
?>
|
||||
```
|
||||
|
||||
بعد تنفيذ البيانات أعلاه، المتغير `$myVariable` سيعقد سلسلة مع قيمة أهلا بالعالم! المتغير `$x` سيعقدون صحيح بقيمة 5 و المتغير `$y` سيعقد تعويم بقيمة من 10.5 ، وسيحتوي المتغير `$z` على سلسلة بقيمة 42.
|
||||
|
||||
|
@ -48,12 +48,13 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
||||
|
||||
نحتاج إلى تحديد الاسم والعمر والطول لتكوين هذه الفئة وفقًا لما يتطلبه المنشئ.
|
||||
|
||||
`<?php
|
||||
$jack = new Man('Jack', '26', '5 Feet 6 Inches');
|
||||
```php
|
||||
<?php
|
||||
$jack = new Man('Jack', '26', '5 Feet 6 Inches');
|
||||
|
||||
echo sprintf('%s - %s - %s', $jack->name, $jack->age, $jack->height);
|
||||
// => Jack - 26 - 5 Feet 6 Inches
|
||||
`
|
||||
echo sprintf('%s - %s - %s', $jack->name, $jack->age, $jack->height);
|
||||
// => Jack - 26 - 5 Feet 6 Inches
|
||||
```
|
||||
|
||||
الآن ، دعنا نقول أننا نريد إضافة طريقة جديدة لهذه الفئة تسمى isActive.
|
||||
|
||||
@ -99,10 +100,11 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
||||
|
||||
يمكننا الحصول على if..sese..else مثل هذه العبارات:
|
||||
|
||||
`<?php
|
||||
```php
|
||||
<?php
|
||||
|
||||
public function isActive()
|
||||
{
|
||||
public function isActive()
|
||||
{
|
||||
if ($this->active == 1) {
|
||||
return "I am an idle man.";
|
||||
} elseif ($this->active == 2) {
|
||||
@ -112,8 +114,8 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
||||
} else {
|
||||
return "I am a very active man.";
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
الآن ، لنأخذ هذه خطوة أخرى.
|
||||
|
||||
@ -133,55 +135,60 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
||||
|
||||
# 1: تعريف الصف كملخص.
|
||||
|
||||
`<?php
|
||||
abstract class Man
|
||||
{
|
||||
.....
|
||||
.....
|
||||
}
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
abstract class Man
|
||||
{
|
||||
.....
|
||||
.....
|
||||
}
|
||||
```
|
||||
|
||||
# 2: إنشاء طريقة مجردة للطريقة التي تريد فرضها داخل الطبقة المجردة.
|
||||
|
||||
`<?php
|
||||
abstract class Man
|
||||
{
|
||||
.....
|
||||
.....
|
||||
abstract public function isActive();
|
||||
}
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
abstract class Man
|
||||
{
|
||||
.....
|
||||
.....
|
||||
abstract public function isActive();
|
||||
}
|
||||
```
|
||||
|
||||
# 3: إنشاء فئة تابعة لتوسيع الفئة المجردة.
|
||||
|
||||
`<?php
|
||||
```php
|
||||
<?php
|
||||
|
||||
class AthleticMan extends Man
|
||||
{
|
||||
.....
|
||||
.....
|
||||
}
|
||||
`
|
||||
class AthleticMan extends Man
|
||||
{
|
||||
.....
|
||||
.....
|
||||
}
|
||||
```
|
||||
|
||||
# 4: تنفيذ الطريقة المجردة داخل فئة الطفل.
|
||||
|
||||
`<?php
|
||||
class AthleticMan extends Man
|
||||
{
|
||||
```php
|
||||
<?php
|
||||
class AthleticMan extends Man
|
||||
{
|
||||
public function isActive()
|
||||
{
|
||||
return "I am a very active athlete.";
|
||||
}
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
# 5: تحفيظ فئة الطفل (وليس الطبقة المجردة).
|
||||
|
||||
`<?php
|
||||
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
||||
echo $jack->isActive();
|
||||
// => I am a very active athlete.
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
||||
echo $jack->isActive();
|
||||
// => I am a very active athlete.
|
||||
```
|
||||
|
||||
كامل تعريف فئة الملخص ورمز التنفيذ:
|
||||
|
||||
@ -237,11 +244,12 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
||||
|
||||
الآن لا يمكن إنشاء مثيل لطبقة `Man` مباشرة لإنشاء كائن.
|
||||
|
||||
`<?php
|
||||
$ted = new Man('Ted', '30', '6 feet');
|
||||
echo $ted->isActive();
|
||||
// => Fatal error: Uncaught Error: Cannot instantiate abstract class Man
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$ted = new Man('Ted', '30', '6 feet');
|
||||
echo $ted->isActive();
|
||||
// => Fatal error: Uncaught Error: Cannot instantiate abstract class Man
|
||||
```
|
||||
|
||||
أيضا ، كل فئة طفل من الطبقة المجردة (درجة `Man` ) تحتاج إلى تنفيذ جميع الأساليب المجردة. سوف يؤدي عدم تنفيذ مثل هذا إلى خطأ فادح.
|
||||
|
||||
@ -325,11 +333,12 @@ _مشاركة وفرض الكود مع تعدد الأشكال باستخدام
|
||||
|
||||
# 3: تحفيز فئة التنفيذ (AthleticMan)
|
||||
|
||||
`<?php
|
||||
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
||||
echo $jack->isActive();
|
||||
// => I am a very active athlete.
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$jack = new AthleticMan('Jack', '26', '5 feet 6 inches');
|
||||
echo $jack->isActive();
|
||||
// => I am a very active athlete.
|
||||
```
|
||||
|
||||
باستخدام الواجهات ، يجب أن تضع في اعتبارك ما يلي:
|
||||
|
||||
|
@ -27,24 +27,25 @@ localeTitle: جلسات PHP
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
// Start the session
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<?php
|
||||
// Start the session
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
// Set session variables
|
||||
$_SESSION["favcolor"] = "blue";
|
||||
$_SESSION["favanimal"] = "dog";
|
||||
echo "Session variables are set.";
|
||||
?>
|
||||
<?php
|
||||
// Set session variables
|
||||
$_SESSION["favcolor"] = "blue";
|
||||
$_SESSION["favanimal"] = "dog";
|
||||
echo "Session variables are set.";
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
**ملاحظة:** يجب أن تكون الدالة session\_start () **أول شيء** في المستند. **قبل** أي علامات HTML.
|
||||
|
||||
@ -59,22 +60,23 @@ localeTitle: جلسات PHP
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<?php
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
// Echo session variables that were set on previous page
|
||||
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
|
||||
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
|
||||
?>
|
||||
<?php
|
||||
// Echo session variables that were set on previous page
|
||||
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
|
||||
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
انتاج:
|
||||
اللون المفضل باللون الأزرق.
|
||||
@ -82,10 +84,11 @@ localeTitle: جلسات PHP
|
||||
|
||||
هناك طريقة أخرى لإظهار كافة قيم متغير جلسة العمل لجلسة مستخدم هي تشغيل التعليمة البرمجية التالية:
|
||||
|
||||
`<?php
|
||||
print_r($_SESSION);
|
||||
?>
|
||||
`
|
||||
```
|
||||
<?php
|
||||
print_r($_SESSION);
|
||||
?>
|
||||
```
|
||||
|
||||
### كيف يعمل؟
|
||||
|
||||
@ -99,22 +102,23 @@ localeTitle: جلسات PHP
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<?php
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
// to change a session variable, just overwrite it
|
||||
$_SESSION["favcolor"] = "pink";
|
||||
print_r($_SESSION);
|
||||
?>
|
||||
<?php
|
||||
// to change a session variable, just overwrite it
|
||||
$_SESSION["favcolor"] = "pink";
|
||||
print_r($_SESSION);
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
## تدمير دورة PHP
|
||||
|
||||
@ -122,21 +126,22 @@ localeTitle: جلسات PHP
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
```
|
||||
<?php
|
||||
session_start();
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
// remove all session variables
|
||||
session_unset();
|
||||
<?php
|
||||
// remove all session variables
|
||||
session_unset();
|
||||
|
||||
// destroy the session
|
||||
session_destroy();
|
||||
?>
|
||||
// destroy the session
|
||||
session_destroy();
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
</body>
|
||||
</html>
|
||||
```
|
@ -14,15 +14,16 @@ Cross Site Request Forgery هي نقطة ضعف في التطبيق بسبب ع
|
||||
|
||||
للدفاع ضد هجوم موقع التزوير طلب التزوير ، يجب عليك التحقق من رمز مميز تم تغييره بشكل منتظم. `/admin/deletecomment.php?id=123` عنوان url `/admin/deletecomment.php?id=123` إلى `/admin/deletecomment.php?id=123&csrf-token=random-per-user-unique-string-here` .
|
||||
|
||||
`<?php
|
||||
// Checking a request's CSRF Token (if true the comment is deleted, if false the comment remains.)
|
||||
session_start();
|
||||
if ($_GET['csrf-token'] == $_SESSION['csrf-token']){
|
||||
```PHP
|
||||
<?php
|
||||
// Checking a request's CSRF Token (if true the comment is deleted, if false the comment remains.)
|
||||
session_start();
|
||||
if ($_GET['csrf-token'] == $_SESSION['csrf-token']){
|
||||
return true;
|
||||
} else {
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
**نصائح:**
|
||||
|
||||
@ -34,19 +35,21 @@ Cross Site Request Forgery هي نقطة ضعف في التطبيق بسبب ع
|
||||
|
||||
عند تحديد CSRF Token ، من المهم أن يكون من المستحيل تخمين المفتاح. يمكن أن تؤدي وظائف OpenSSL في PHP إلى إنشاء مفتاح عشوائي لك وتخزينه كمتغير جلسة عمل.
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
$_SESSION['csrf-token'] = bin2hex(openssl_random_pseudo_bytes(16));
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
session_start();
|
||||
$_SESSION['csrf-token'] = bin2hex(openssl_random_pseudo_bytes(16));
|
||||
```
|
||||
|
||||
#### استخدام رمز CSRF لإكمال الطلبات الشرعية
|
||||
|
||||
يمكنك تضمين متغير الجلسة الذي قمت بحفظه مسبقًا مع رمز CSRF الخاص بك في عنوان URL تأكد من أنه مسموح للمسؤول الشرعي بحذف التعليقات. بدون الرمز الصحيح سيتم حظر الطلب.
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
echo '<a href="/admin/?id=123&csrf-token='.$_SESSION['csrf-token'].'">Delete Comment</a>'; // Only the logged in user has access to the CSRF Token - the token isn't accessible to the attacker preventing their attack from being successful.
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
session_start();
|
||||
echo '<a href="/admin/?id=123&csrf-token='.$_SESSION['csrf-token'].'">Delete Comment</a>'; // Only the logged in user has access to the CSRF Token - the token isn't accessible to the attacker preventing their attack from being successful.
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -10,10 +10,11 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
||||
|
||||
تسمح المدونة للمستخدمين بوضع تعليقاتهم باستخدام علامات HTML ، إلا أن النص البرمجي الذي يمد المدونة لا يزيل علامات `<script>` تسمح لأي مستخدم بتشغيل javascript على الصفحة. يمكن للمهاجم استخدام هذه الميزة لصالح تشغيل javascript ضار في المستعرض. يمكن أن تصيب المستخدمين بالبرامج الضارة ، وتسرق ملفات تعريف الارتباط للجلسة ، والمزيد.
|
||||
|
||||
`<script>
|
||||
```HTML
|
||||
<script>
|
||||
alert('Cross Site Scripting!');
|
||||
</script>
|
||||
`
|
||||
</script>
|
||||
```
|
||||
|
||||
### الدفاع عن موقع الويب الخاص بك من هجمات البرمجة عبر الموقع في PHP
|
||||
|
||||
@ -21,28 +22,31 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
||||
|
||||
`htmlspecialchars($string)` وظيفة `htmlspecialchars($string)` منع سلسلة HTML من العرض كملف HTML وعرضها كنص عادي لمتصفح الويب. **htmlspecialchars () مثال التعليمات البرمجية**
|
||||
|
||||
`<?php
|
||||
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
||||
echo htmlspecialchars($usercomment);
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
||||
echo htmlspecialchars($usercomment);
|
||||
```
|
||||
|
||||
الطريقة الأخرى هي `strip_tags($string, $allowedtags)` التي تزيل كل علامات HTML باستثناء علامات HTML التي قمت بإضافتها إلى القائمة البيضاء. من المهم أن نلاحظ أنه مع وظيفة `strip_tags()` يجب أن تكون أكثر حذراً ، هذه الوظيفة لا تمنع المستخدم من تضمين javascript كحلقة ارتباط ، سيكون عليك تطهير ذلك بمفردنا.
|
||||
|
||||
**code\_tags () مثال التعليمات البرمجية**
|
||||
|
||||
`<?php
|
||||
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
||||
$allowedtags = "<p><a><h1><h2><h3>";
|
||||
echo strip_tags($usercomment, $allowedtags);
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$usercomment = "<string>alert('Cross Site Scripting!');</script>";
|
||||
$allowedtags = "<p><a><h1><h2><h3>";
|
||||
echo strip_tags($usercomment, $allowedtags);
|
||||
```
|
||||
|
||||
**ضبط رأس الحماية X-XSS:**
|
||||
|
||||
في PHP ، يمكنك إرسال `X-XSS-Protection` Header الذي سيخبر المتصفحات بالتحقق من هجوم Scripting عبر موقع ويب منع الصفحة من التحميل. هذا لا يمنع جميع الهجمات النصية عبر الموقع فقط تنعكس منها ويجب استخدامها في تركيبة مع أساليب أخرى.
|
||||
|
||||
`<?php
|
||||
header("X-XSS-Protection: 1; mode=block");
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
header("X-XSS-Protection: 1; mode=block");
|
||||
```
|
||||
|
||||
**كتابة وظيفة التعقيم الخاصة بك** خيار آخر ، إذا كنت ترغب في مزيد من التحكم في كيفية عمل التطهير ، هو كتابة وظيفة تعقيم HTML الخاصة بك ، وهذا لا يوصى به للمبتدئين PHP كخطأ من شأنه أن يجعل موقع الويب الخاص بك عرضة.
|
||||
|
||||
@ -56,9 +60,10 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
||||
|
||||
**مثال على سياسة أمان المحتوى التي تم تعيينها في رأس HTTP**
|
||||
|
||||
`<?php
|
||||
header("content-security-policy: default-src 'self'; img-src https://*; child-src 'none';");
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
header("content-security-policy: default-src 'self'; img-src https://*; child-src 'none';");
|
||||
```
|
||||
|
||||
#### عيّن سياسة أمان المحتوى كعلامات وصفية
|
||||
|
||||
@ -66,8 +71,9 @@ Cross Site Scripting هو نوع من نقاط الضعف في تطبيق الو
|
||||
|
||||
**مثال على سياسة أمان المحتوى التي تم تعيينها في علامة HTML الوصفية**
|
||||
|
||||
`<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||
`
|
||||
```HTML
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -12,11 +12,12 @@ localeTitle: ادراج ملف محلي
|
||||
|
||||
### الدفاع عن موقع الويب الخاص بك من هجمات تضمين الملف المحلي في PHP
|
||||
|
||||
`<?php
|
||||
if(basename($_GET['file]) !== $_GET['file']) {
|
||||
```PHP
|
||||
<?php
|
||||
if(basename($_GET['file]) !== $_GET['file']) {
|
||||
die('INVALID FILE REQUESTED');
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -14,11 +14,12 @@ localeTitle: إدراج الملف عن بعد
|
||||
|
||||
سيوفر كود PHP التالي حماية قوية ضد هجمات تضمين الملفات عن بعد
|
||||
|
||||
`<?php
|
||||
if(basename($_GET['file]) !== $_GET['file']) {
|
||||
```PHP
|
||||
<?php
|
||||
if(basename($_GET['file]) !== $_GET['file']) {
|
||||
die('INVALID FILE REQUESTED');
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
* يمكنك تعطيل `allow_url_fopen` في ملف php.ini كحماية إضافية ضد تضمين الملفات عن بعد.
|
||||
|
||||
|
@ -10,34 +10,35 @@ localeTitle: اختطاف الجلسة
|
||||
|
||||
للدفاع ضد هجمات اختطاف جلسة العمل ، يلزمك التحقق من معلومات المتصفح والموقع الحالي للمستخدم مقابل المعلومات المخزنة حول الجلسة. فيما يلي مثال للتنفيذ يمكن أن يساعد في تخفيف آثار هجوم اختطاف جلسة العمل. يقوم بالتحقق من عنوان IP و "وكيل المستخدم" ، وإذا انتهت الجلسة ، قم بإزالة جلسة قبل استئنافها.
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
```PHP
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
// Does IP Address match?
|
||||
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
||||
{
|
||||
// Does IP Address match?
|
||||
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
|
||||
// Does user agent match?
|
||||
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
}
|
||||
|
||||
// Does user agent match?
|
||||
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
||||
{
|
||||
// Is the last access over an hour ago?
|
||||
if (time() > ($_SESSION['lastaccess'] + 3600))
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
|
||||
// Is the last access over an hour ago?
|
||||
if (time() > ($_SESSION['lastaccess'] + 3600))
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
$_SESSION['lastaccess'] = time();
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -18,34 +18,35 @@ localeTitle: معرف الجلسة
|
||||
|
||||
للدفاع ضد هجمات معرف هوية الجلسة ، يجب عليك التحقق من محاولة الوصول إلى الجلسة مقابل عدة عوامل للتأكيد على ما إذا كان الوصول شرعيًا ولتجنب المستخدم من اختطاف جلسة المستخدم بنجاح. فيما يلي مثال للتنفيذ يمكن أن يساعد في تخفيف آثار هجوم اكتساب معرّف جلسة العمل. ويتحقق من عنوان IP و "وكيل المستخدم" ، وإذا انتهت الجلسة "إزالة جلسة عمل قبل الحصول عليها".
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
```PHP
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
// Does IP Address match?
|
||||
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
||||
{
|
||||
// Does IP Address match?
|
||||
if ($_SERVER['REMOTE_ADDR'] != $_SESSION['ipaddress'])
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
|
||||
// Does user agent match?
|
||||
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
}
|
||||
|
||||
// Does user agent match?
|
||||
if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['useragent'])
|
||||
{
|
||||
// Is the last access over an hour ago?
|
||||
if (time() > ($_SESSION['lastaccess'] + 3600))
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
|
||||
// Is the last access over an hour ago?
|
||||
if (time() > ($_SESSION['lastaccess'] + 3600))
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
$_SESSION['lastaccess'] = time();
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
**نصائح:**
|
||||
|
||||
|
@ -10,33 +10,34 @@ localeTitle: حقن SQL
|
||||
|
||||
يقوم البرنامج النصي PHP أدناه بتشغيل عبارة SQL للحصول على البريد الإلكتروني الخاص بالمستخدم بواسطة المعرّف. ومع ذلك ، لا يتم تعقيم الإدخال مما يجعله عرضة لحقن SQL
|
||||
|
||||
`<?php
|
||||
$input = $_GET['id'];
|
||||
$dbserver = "localhost";
|
||||
$dbuser = "camper";
|
||||
$dbpass = "supersecretcampsitepassword";
|
||||
$dbname = "freecodecamp";
|
||||
```PHP
|
||||
<?php
|
||||
$input = $_GET['id'];
|
||||
$dbserver = "localhost";
|
||||
$dbuser = "camper";
|
||||
$dbpass = "supersecretcampsitepassword";
|
||||
$dbname = "freecodecamp";
|
||||
|
||||
$conn = new mysqli($dbserver, $dbuser, $dbpass, $dbname);
|
||||
$conn = new mysqli($dbserver, $dbuser, $dbpass, $dbname);
|
||||
|
||||
if ($conn->connect_error) {
|
||||
if ($conn->connect_error) {
|
||||
die("Connection failed: " . $conn->connect_error);
|
||||
}
|
||||
}
|
||||
|
||||
$sql = "SELECT email FROM users WHERE id =" . $input;
|
||||
$sql = "SELECT email FROM users WHERE id =" . $input;
|
||||
|
||||
$result = $conn->query($sql);
|
||||
$result = $conn->query($sql);
|
||||
|
||||
if ($result->num_rows > 0) {
|
||||
if ($result->num_rows > 0) {
|
||||
while($row = $result->fetch_assoc()) {
|
||||
echo $row["email"];
|
||||
}
|
||||
} else {
|
||||
} else {
|
||||
echo "no results";
|
||||
}
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
`
|
||||
$conn->close();
|
||||
```
|
||||
|
||||
``SELECT email FROM users WHERE id = `$input`;
|
||||
``
|
||||
@ -49,8 +50,9 @@ localeTitle: حقن SQL
|
||||
|
||||
**هيتليستينغ:** يتم استخدام نهج القائمة البيضاء في الحالات التي يتوقع فيها بعض المدخلات. يمكنك سرد كل إدخال متوقع في أحد مفاتيح تبديل PHP ومن ثم إعداد افتراضي للإدخال غير الصحيح. لا داعي للقلق بشأن مشكلة في كتابة النوع أو تجاوز مسار الهروب ولكن الإدخال المسموح به محدود بشكل غير محدود. يبقى خيارًا ، راجع المثال أدناه.
|
||||
|
||||
`<?php
|
||||
switch ($input) {
|
||||
```PHP
|
||||
<?php
|
||||
switch ($input) {
|
||||
case "1":
|
||||
//db query 1
|
||||
break;
|
||||
@ -59,8 +61,8 @@ localeTitle: حقن SQL
|
||||
break;
|
||||
default:
|
||||
// invalid input return error
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
**نوع الصب:** يشيع استخدام أسلوب صب النمط لتطبيق يستخدم مدخلات رقمية. قم ببساطة بإدخال الإدخال باستخدام `(int) $input` وسيتم السماح فقط بقيمة رقمية.
|
||||
|
||||
|
@ -10,9 +10,10 @@ localeTitle: جلسات
|
||||
|
||||
في كل صفحة تريد الوصول إلى الجلسة ، ستحتاج إلى بدء (أو تحميل) الجلسة. للقيام بذلك ، قم بتشغيل الدالة `session_start()` التي تقوم بتحميل نظام جلسة PHP.
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
session_start();
|
||||
```
|
||||
|
||||
تجدر الإشارة إلى أنه عند استخدام الجلسات المستندة إلى ملفات تعريف الارتباط ، يجب استدعاء session\_start () قبل إخراج أي شيء إلى المتصفح. أي شيء آخر سيؤدي إلى خطأ.
|
||||
|
||||
@ -22,26 +23,29 @@ localeTitle: جلسات
|
||||
|
||||
في المثال التالي ، ترى أن اختيار المستخدم للموضوع قد تم تعيينه على المظهر رقم واحد.
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
$_SESSION['themechoice'] = 1;
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
session_start();
|
||||
$_SESSION['themechoice'] = 1;
|
||||
```
|
||||
|
||||
يشبه الوصول إلى متغير جلسة إلى إعداد واحد. ما عليك سوى تضمين المتغير الذي تحتاج إلى الوصول إليه. على سبيل المثال صدى بها كما هو موضح في المثال رمز أدناه.
|
||||
|
||||
`<?php
|
||||
session_start();
|
||||
echo $_SESSION['themechoice'];
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
session_start();
|
||||
echo $_SESSION['themechoice'];
|
||||
```
|
||||
|
||||
### إزالة الجلسة
|
||||
|
||||
لإزالة جلسة من النظام ، قم بتشغيل شفرة PHP التالية. سيؤدي ذلك إلى إلغاء تعيين متغيرات الجلسة وحذفها من النظام.
|
||||
|
||||
`<?php
|
||||
session_unset();
|
||||
session_destroy();
|
||||
`
|
||||
```PHP
|
||||
<?php
|
||||
session_unset();
|
||||
session_destroy();
|
||||
```
|
||||
|
||||
### الجلسات مؤقتة
|
||||
|
||||
|
@ -67,24 +67,25 @@ localeTitle: بيان التبديل
|
||||
|
||||
## انتاج |
|
||||
|
||||
`if case is 1
|
||||
> Dice show number One.
|
||||
```
|
||||
if case is 1
|
||||
> Dice show number One.
|
||||
|
||||
if case is 2
|
||||
> Dice show number Two.
|
||||
if case is 2
|
||||
> Dice show number Two.
|
||||
|
||||
if case is 3
|
||||
> Dice show number Three or Four.
|
||||
if case is 3
|
||||
> Dice show number Three or Four.
|
||||
|
||||
if case is 4
|
||||
> Dice show number Three or Four.
|
||||
if case is 4
|
||||
> Dice show number Three or Four.
|
||||
|
||||
if case is 5
|
||||
> FiveSixDice show number Six.
|
||||
if case is 5
|
||||
> FiveSixDice show number Six.
|
||||
|
||||
if case is 6
|
||||
> SixDice show number Six.
|
||||
if case is 6
|
||||
> SixDice show number Six.
|
||||
|
||||
if none of the above
|
||||
> Dice show number unknown.
|
||||
`
|
||||
if none of the above
|
||||
> Dice show number unknown.
|
||||
```
|
@ -8,7 +8,8 @@ localeTitle: تبديل العبارات
|
||||
|
||||
### بناء الجملة:
|
||||
|
||||
`switch(x) {
|
||||
```PHP
|
||||
switch(x) {
|
||||
case 1:
|
||||
statement1;
|
||||
break;
|
||||
@ -17,8 +18,8 @@ localeTitle: تبديل العبارات
|
||||
break;
|
||||
default:
|
||||
defaultstatement;
|
||||
}
|
||||
`
|
||||
}
|
||||
```
|
||||
|
||||
في المثال أعلاه ، x هي الشرط. سيتم تنفيذ التصريحات التالية للحالة التي تطابق. إذا لم تكن هناك تطابقات ، فسيتم تشغيل العبارة (الألفاظ الافتراضية).
|
||||
|
||||
|
@ -6,19 +6,20 @@ localeTitle: بناء الجملة
|
||||
|
||||
PHP هي لغة تسمح لك بتضمين محتوى ديناميكي في صفحات ويب ثابتة خلاف ذلك. مكتوب بخط ثابت مع html ، ببساطة إعادة تسمية ملف .html إلى .php (يجب أن يكون خادم الويب مثبتًا على php) للبدء.
|
||||
|
||||
`<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>PHP Example</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>PHP Example</h1>
|
||||
<?php
|
||||
```PHP
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>PHP Example</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>PHP Example</h1>
|
||||
<?php
|
||||
echo "Hello World from PHP!";
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
#### معلومات اكثر:
|
||||
|
||||
|
@ -21,9 +21,10 @@ localeTitle: أنواع البيانات PHP
|
||||
|
||||
#### مثال
|
||||
|
||||
`$x = "Hello!";
|
||||
$y = 'Hello!';
|
||||
`
|
||||
```php
|
||||
$x = "Hello!";
|
||||
$y = 'Hello!';
|
||||
```
|
||||
|
||||
## عدد صحيح
|
||||
|
||||
@ -38,8 +39,9 @@ localeTitle: أنواع البيانات PHP
|
||||
|
||||
#### مثال
|
||||
|
||||
`$x = 5;
|
||||
`
|
||||
```php
|
||||
$x = 5;
|
||||
```
|
||||
|
||||
## تطفو
|
||||
|
||||
@ -47,23 +49,26 @@ localeTitle: أنواع البيانات PHP
|
||||
|
||||
#### مثال
|
||||
|
||||
`$x = 5.01;
|
||||
`
|
||||
```php
|
||||
$x = 5.01;
|
||||
```
|
||||
|
||||
## منطقية
|
||||
|
||||
Boolean يمثل حالتين محتملتين: TRUE أو FALSE. يتم استخدام Booleans غالبًا في الاختبارات الشرطية.
|
||||
|
||||
`$x = true;
|
||||
$y = false;
|
||||
`
|
||||
```php
|
||||
$x = true;
|
||||
$y = false;
|
||||
```
|
||||
|
||||
## مجموعة مصفوفة
|
||||
|
||||
صفيف بتخزين قيم متعددة في متغير واحد.
|
||||
|
||||
`$colours = array("Blue","Purple","Pink");
|
||||
`
|
||||
```php
|
||||
$colours = array("Blue","Purple","Pink");
|
||||
```
|
||||
|
||||
## قيمة فارغة
|
||||
|
||||
@ -73,11 +78,12 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
||||
|
||||
**ملاحظة:** إذا تم إنشاء متغير بدون قيمة ، فسيتم تعيين قيمة فارغة له تلقائيًا.
|
||||
|
||||
`<?php
|
||||
$x = "Hello world!";
|
||||
$x = null;
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$x = "Hello world!";
|
||||
$x = null;
|
||||
?>
|
||||
```
|
||||
|
||||
انتاج:
|
||||
لا شيء
|
||||
@ -90,17 +96,18 @@ Null هو نوع بيانات خاص يمكن أن يكون له قيمة واح
|
||||
|
||||
**مثال:**
|
||||
|
||||
`<?php
|
||||
class Car {
|
||||
```php
|
||||
<?php
|
||||
class Car {
|
||||
function Car() {
|
||||
$this->model = "VW";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// create an object
|
||||
$herbie = new Car();
|
||||
// create an object
|
||||
$herbie = new Car();
|
||||
|
||||
// show object properties
|
||||
echo $herbie->model;
|
||||
?>
|
||||
`
|
||||
// show object properties
|
||||
echo $herbie->model;
|
||||
?>
|
||||
```
|
@ -10,12 +10,13 @@ localeTitle: المتغيرات
|
||||
|
||||
**بناء الجملة:**
|
||||
|
||||
`<?php
|
||||
$txt = "Hello world!";
|
||||
$x = 5;
|
||||
$y = 10.5;
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$txt = "Hello world!";
|
||||
$x = 5;
|
||||
$y = 10.5;
|
||||
?>
|
||||
```
|
||||
|
||||
بعد تنفيذ العبارات أعلاه ، سيحتوي المتغير $ txt على قيمة Hello world !، وسيحتفظ المتغير $ x بالقيمة 5 ، وسيحتفظ المتغير $ y بالقيمة 10.5.
|
||||
|
||||
@ -37,28 +38,31 @@ localeTitle: المتغيرات
|
||||
|
||||
سيوضح المثال التالي كيفية إخراج النص والمتغير:
|
||||
|
||||
`<?php
|
||||
$txt = "github.com";
|
||||
echo "I love $txt!";
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$txt = "github.com";
|
||||
echo "I love $txt!";
|
||||
?>
|
||||
```
|
||||
|
||||
سينتج المثال التالي نفس الإخراج مثل المثال أعلاه:
|
||||
|
||||
`<?php
|
||||
$txt = "github.com";
|
||||
echo "I love " . $txt . "!";
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$txt = "github.com";
|
||||
echo "I love " . $txt . "!";
|
||||
?>
|
||||
```
|
||||
|
||||
سينتج المثال التالي مجموع متغيرين:
|
||||
|
||||
`<?php
|
||||
$x = 5;
|
||||
$y = 4;
|
||||
echo $x + $y;
|
||||
?>
|
||||
`
|
||||
```php
|
||||
<?php
|
||||
$x = 5;
|
||||
$y = 4;
|
||||
echo $x + $y;
|
||||
?>
|
||||
```
|
||||
|
||||
# PHP هي لغة مكتوبة بشكل فضفاض
|
||||
|
||||
|
Reference in New Issue
Block a user