คำถามติดแท็ก static-access

7
เหตุใดสมาชิกข้อมูลแบบคงที่จึงต้องกำหนดนอกคลาสแยกต่างหากใน C ++ (ไม่เหมือนกับ Java)
class A { static int foo () {} // ok static int x; // <--- needed to be defined separately in .cpp file }; ฉันไม่เห็นความต้องการในการA::xกำหนดแยกต่างหากในไฟล์. cpp (หรือไฟล์เดียวกันสำหรับแม่แบบ) ทำไมไม่สามารถA::xประกาศและกำหนดในเวลาเดียวกันได้? มันถูกห้ามด้วยเหตุผลทางประวัติศาสตร์หรือไม่? คำถามหลักของฉันคือมันจะส่งผลกระทบต่อฟังก์ชั่นใด ๆ หากstaticข้อมูลสมาชิกถูกประกาศ / กำหนดในเวลาเดียวกัน (เช่นเดียวกับJava )?

3
คลาสสแตติกที่มีเมธอดสแตติกพิจารณาว่าเป็น SOLID หรือไม่
SOLIDรวมถึงการแทนที่ Liskov ซึ่งมีความเห็นว่า "วัตถุในโปรแกรมควรเปลี่ยนได้ด้วยอินสแตนซ์ของชนิดย่อยโดยไม่เปลี่ยนแปลงความถูกต้องของโปรแกรมนั้น" เนื่องจากคลาสแบบสแตติกที่มีเมธอดแบบสแตติก (บิตเช่นMathคลาส) ไม่มีอินสแตนซ์เลยระบบของฉันจะถือว่าเป็นแบบ SOLID หรือไม่ถ้าฉันมีคลาสแบบสแตติกที่มีวิธีแบบสแตติก

4
Java - มันเป็นความคิดที่ดีที่จะมีคลาสแบบคงที่?
ฉันกำลังทำงานในโครงการเดี่ยวขนาดใหญ่ขึ้นและตอนนี้และฉันมีหลายชั้นเรียนซึ่งฉันไม่เห็นเหตุผลที่จะสร้างตัวอย่างของ ตัวอย่างเช่นคลาสลูกเต๋าของฉันตอนนี้เก็บข้อมูลทั้งหมดของมันแบบสแตติกและวิธีการทั้งหมดของมันก็คงที่เช่นกัน Dice.roll()ผมไม่จำเป็นต้องเริ่มต้นมันเพราะเมื่อฉันต้องการที่จะม้วนลูกเต๋าและได้รับค่าใหม่ฉันเพียงแค่การใช้งาน ฉันมีหลายคลาสที่คล้ายกันซึ่งมีฟังก์ชั่นหลักเพียงอย่างเดียวเช่นนี้และฉันกำลังจะเริ่มทำงานกับคลาส "คอนโทรลเลอร์" ที่จะรับผิดชอบกิจกรรมทั้งหมด (เช่นเมื่อผู้เล่นเคลื่อนตัวและสิ่งที่เกิดขึ้นในปัจจุบัน) เป็น) และฉันพบว่าฉันสามารถทำตามแนวคิดเดียวกันสำหรับชั้นเรียนนี้ได้ ฉันไม่เคยวางแผนที่จะสร้างวัตถุหลายรายการสำหรับคลาสที่เฉพาะเจาะจงเหล่านี้ดังนั้นจึงเป็นความคิดที่ดีหรือไม่ที่จะทำให้พวกมันคงที่? ฉันสงสัยว่าสิ่งนี้ถือเป็น "การปฏิบัติที่ไม่ดี" เมื่อพูดถึงจาวา จากสิ่งที่ฉันได้เห็นชุมชนดูเหมือนจะแยกในหัวข้อนี้? ต่อไปฉันจะรักการอภิปรายเกี่ยวกับเรื่องนี้และการเชื่อมโยงไปยังแหล่งข้อมูลจะดีเช่นกัน!

1
ทำไมจึงไม่มีระบบอำนวยความสะดวกในการโอเวอร์โหลดคุณสมบัติคงที่ใน PHP?
Intro PHP อนุญาตให้คุณโอเวอร์โหลดการเรียกใช้เมธอดและการเข้าถึงคุณสมบัติโดยการประกาศเมธอดมหัศจรรย์ในคลาส สิ่งนี้ทำให้รหัสเช่น: class Foo { public function __get($name) { return 42; } } $foo = new Foo; echo $foo->missingProperty; // prints "42" นอกเหนือจากการบรรทุกเกินพิกัดเช่นคุณสมบัติและวิธีการตั้งแต่ PHP 5.3.0 เรายังสามารถเกินวิธีการโทรออกโดยวิธีการเอาชนะมายากลstatic__callStatic บางสิ่งหายไป สิ่งที่ขาดหายไปจากฟังก์ชั่นที่มีอยู่อย่างชัดเจนคือความสามารถในการโอเวอร์โหลดคุณสมบัติสแตติกเช่น: echo Foo::$missingProperty; // fatal error: access to undeclared static property ข้อ จำกัด นี้เป็นอย่างชัดเจนเอกสาร : การโอเวอร์โหลดของคุณสมบัติใช้งานได้เฉพาะในบริบทของวัตถุ วิธีการเวทย์มนตร์เหล่านี้จะไม่ถูกกระตุ้นในบริบทคงที่ staticดังนั้นวิธีการเหล่านี้ไม่ควรได้รับการประกาศ ในฐานะของ PHP 5.3.0 …

2
คงที่ไม่ดี แต่สิ่งที่เกี่ยวกับรูปแบบโรงงาน?
ฉันอยู่ในโครงการ TDD ดังนั้นฉันจึงพยายามยึดแนวทางที่ดีที่เกี่ยวข้องกับการพัฒนาประเภทนั้นให้มากที่สุด หนึ่งในนั้นคือหลีกเลี่ยงมากที่สุดคงที่และเป็นไปได้ทั่วโลก ฉันกำลังประสบปัญหานี้: ฉันมี "บทความ" วัตถุที่สามารถมี "ตัวเลือก" (เพิ่มเติม "บทความไมโคร") ที่เชื่อมโยงกับมัน ฉันไม่สามารถหาวิธีที่จะมีวิธีการที่ดีที่จะไม่ตอบโต้การผลิตหรือสร้างการสืบค้นมากเกินไปเพราะฉันจะอยู่ในสถานการณ์ที่ทุกอย่าง decoupled ดังนั้นโดยทั่วไปฉันจะต้องทำ 1 แบบสอบถามต่อวัตถุ จากมุมมองที่แท้จริงของฉันฉันเห็น 3 ตัวเลือก: 1) สร้างภายในบทความ: class Article { //[...] public function getArrOption(){ //Build an array of Options instance. //return an array of Options. } } Pro:ตรงไปข้างหน้า Const: Maintenability: ตอนนี้วัตถุบทความมีตรรกะการสร้างสำหรับวัตถุตัวเลือก ซึ่งอาจนำไปสู่การทำสำเนารหัส 2) การใช้ optionFactory …
13 php  tdd  static-access 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.